Compartilhar via


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

Consulte também

Referência

CollectionBase

ICollection

IEnumerable

IList

Object