Compartilhar via


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

System.Collections.IEnumerable

System.Collections.IList

System.Object