CA1039: as listas são fortemente tipadas
TypeName |
ListsAreStronglyTyped |
CheckId |
CA1039 |
Categoria |
Microsoft.Design |
Alteração Significativa |
Quebra |
Causa
O utilitário ou o implementa protegidos IList do tipo mas não oferecem um método com rigidez para um ou mais dos seguintes:
IList.Item
IList.Add
IList.Contains
IList.IndexOf
IList.Insert
IList.Remove
Descrição da Regra
Essa regra requer implementações de IList fornecer membros fortemente tipados de forma que usuários não sejam necessários lançar argumentos para o tipo de Object quando usarem a funcionalidade fornecida pela interface.A interface de IList é implementada por coleções de objetos que podem ser acessados pelo índice.Esta regra assumirá que o tipo que implementa IList o faz para gerenciar uma coleção de instâncias de um tipo que é mais segura que Object.
IList implementa as interfaces de ICollection e de IEnumerable .Se você implementa IList, você deve fornecer os membros fortemente tipados necessários para ICollection.Se os objetos da coleção ValueTypeestendem, você deve fornecer um membro com rigidez para que GetEnumerator evite a redução de desempenho que é causado encaixotando; isso não é necessário quando os objetos da coleção é um tipo de referência.
Para estar de acordo com essa regra, implementar os membros da interface explicitamente usando nomes no formulário InterfaceName.InterfaceMemberName, como Add.Os membros explícitos da interface usam os tipos de dados que são declaradas pela interface.Implementar os membros fortemente tipados usando o nome do membro da interface, como Add.Declare os membros fortemente tipados como o utilitário, e declarar os parâmetros e valores de retorno do tipo forte que é gerenciado pela coleção.Os tipos fortes substituem os tipos mais importantes como Object e Array que foram declarados pela interface.
Como Corrigir Violações
Para corrigir uma violação desta regra, explicitamente implementar membros de IList e fornecer de backup fortemente tipadas para os membros que foram observados anteriormente.Corretamente para o código que implementa a interface de IList e fornece os membros fortemente tipados exigidas, consulte o exemplo.
Quando Suprimir Alertas
Suprima um aviso desta regra quando você implementa uma nova coleção de objetos com base, como uma lista vinculada, onde os tipos que estendem a nova coleção determinem o tipo forte.Esses tipos devem estar de acordo com essa regra e expor os membros fortemente tipados.
Exemplo
No exemplo a seguir, o tipo YourType estende CollectionBase, como eles devem todas as coleções fortemente tipadas.Observe que CollectionBase fornece implementação explícita da interface de IList para você.Em virtude disso, você só deve fornecer os membros com rigidez de tipo para IList e ICollection.
using System;
using System.Collections;
namespace DesignLibrary
{
public class YourType
{
// Implementation for your strong type goes here.
public YourType() {}
}
public class YourTypeCollection : CollectionBase
{
// Provide the strongly typed members for IList.
public YourType this[int index]
{
get
{
return (YourType) ((IList)this)[index];
}
set
{
((IList)this)[index] = value;
}
}
public int Add(YourType value)
{
return ((IList)this).Add ((object) value);
}
public bool Contains(YourType value)
{
return ((IList)this).Contains((object) value);
}
public void Insert(int index, YourType value)
{
((IList)this).Insert(index, (object) value);
}
public void Remove(YourType value)
{
((IList)this).Remove((object) value);
}
public int IndexOf(YourType value)
{
return ((IList)this).IndexOf((object) value);
}
// Provide the strongly typed member for ICollection.
public void CopyTo(YourType[] array, int index)
{
((ICollection)this).CopyTo(array, index);
}
}
}
Regras Relacionadas
CA1035: as implementações de ICollection têm membros fortemente tipados
CA1038: os enumeradores devem ser fortemente tipados