Listas são fortemente tipadas
TypeName |
ListsAreStronglyTyped |
CheckId |
CA1039 |
Category (Categoria) |
Microsoft.Design |
Quebrando alterar |
Quebrando |
Causa
O tipo de público ou protegido implementa System.Collections.IList mas não fornece um método com rigidez de tipos para uma ou mais destes procedimentos:
IList.Item
IList.Add
IList.Contains
IList.IndexOf
IList.Insert
IList.Remove
Descrição da regra
Esta regra requer IList implementações fornecer altamente digitado membros para que os usuários não precisem converter argumentos para o System.Object Digite quando eles usam a funcionalidade fornecida pela interface. The IList a interface é implementada por coleções de objetos que podem ser acessados pelo índice. Esta regra pressupõe que o tipo que implementa IList faz isso para gerenciar uma coleção de instâncias de um tipo é mais forte que Object.
IList implementa o System.Collections.ICollection e System.Collections.IEnumerable interfaces. Se você implementar IList, você deve fornecer os membros fortemente tipados necessário para ICollection. Se os objetos na coleção estendem System.ValueType, você deve fornecer um membro com rigidez de tipos para GetEnumerator Para evitar a diminuir no desempenho causado pela conversão boxing; isso não é necessário se objetos da coleção estiverem um tipo de referência.
Para atender a essa regra, implemente sistema autônomo membros de interface explicitamente com nomes no formulário InterfaceName.InterfaceMemberName, por exemplo, Add. Os membros de interface explícita usam os tipos de dados declarados pela interface.Implemente sistema autônomo membros fortemente tipados usando o nome de membro de interface, sistema autônomo Add. Declarar sistema autônomo membros fortemente tipados sistema autônomo public e declarar parâmetros e retornar valores a serem do tipo forte gerenciado por coleção.sistema autônomo tipos de alta seguras substituir tipos mais fracos, sistema autônomo Object e Array declarado pela interface.
Como corrigir violações
Para corrigir uma violação dessa regra, implementar explicitamente IList os membros e oferecem alternativas com rigidez de tipos para os membros indicado anteriormente. Para obter um código que implementa o corretamenteIList interface e fornece os membros fortemente tipados, consulte o exemplo a seguir.
Quando suprimir avisos
Eliminar um aviso essa regra ao implementar uma nova coleção com base em objeto, sistema autônomo uma lista vinculada, onde tipos estendem a nova coleção determinam o tipo de alta segurança.Esses tipos devem estar em conformidade com essa regra e exponha membros fortemente tipados.
Exemplo
No exemplo a seguir, o tipo de YourType amplia System.Collections.CollectionBase, sistema autônomo devem todas sistema autônomo coleções com rigidez de tipos. Observe que CollectionBase Fornece a implementação explícita da IList interface para você, portanto, você precisa fornecer somente os membros fortemente tipados 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
Implementações de ICollection tem rigidez de tipos membros
Enumeradores devem ser fortemente tipados
Consulte também
Referência
System.Collections.CollectionBase
System.Collections.ICollection