CA1039: Listas são fortemente tipadas

TypeName

ListsAreStronglyTyped

CheckId

CA1039

<strong>Categoria</strong>

Microsoft.design

Alteração significativa

Quebrando

Causa

Público ou protegido digite implementa System.Collections.IList , mas não fornece um método com rigidez de tipos para uma ou mais das seguintes opções:

  • IList.Item

  • IList.Add

  • IList.Contains

  • IList.IndexOf

  • IList.Insert

  • IList.Remove

Descrição da regra

Esta regra requer IList implementações para fornecer altamente digitado membros para que os usuários não precisam converter argumentos para o System.Object tipo quando usarem a funcionalidade que é fornecida pela interface. O IList 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 do que Object.

IListimplementa o System.Collections.ICollection e System.Collections.IEnumerable interfaces. Se você implementar IList, você deve fornecer membros fortemente tipados necessários para ICollection. Se os objetos na coleção estendem System.ValueType, você deve fornecer um membro com rigidez de tipos de GetEnumerator para evitar a diminuição no desempenho que é causado pela conversão boxing; não é necessário quando os objetos da coleção são um tipo de referência.

Para cumprir essa regra, implemente os membros de interface explicitamente usando nomes, como no formulário InterfaceName.InterfaceMemberName, Add. Os membros de interface explícita usar os tipos de dados que são declarados pela interface. Implementar membros fortemente tipados usando o nome do membro de interface, como Add. Declarar os membros com rigidez de tipos como public e declarar parâmetros e retornar valores a ser do tipo de alta segurança é gerenciado pela coleção. Os tipos de alta seguras substituir os tipos mais fracos como Object e Array que são declaradas pela interface.

Como corrigir violações

Para corrigir uma violação desta regra, implementar explicitamente IList membros e fornecer alternativas com rigidez de tipos para os membros anotado anteriormente. Para o código que implementa corretamente o IList interface e fornece os membros fortemente tipados, consulte o exemplo a seguir.

Quando suprimir avisos

Suprimi um aviso da regra quando você implementa uma nova coleção baseada em objeto, como, por exemplo, uma lista vinculada, onde a tipos de estendem a nova coleção determinam o tipo de alta segurança. Esses tipos devem cumprir essa regra e expor membros fortemente tipados.

Exemplo

No exemplo a seguir, o tipo de YourType estende System.Collections.CollectionBase, como todas as coleções com rigidez de tipos. Observe que CollectionBase fornece a implementação explícita de IList interface para você. Portanto, você deve 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

CA1035: Implementações de ICollection com rigidez de tipos membros

CA1038: Enumeradores devem ser fortemente tipados

Consulte também

Referência

System.Collections.CollectionBase

System.Collections.ICollection

System.Collections.IEnumerable

System.Collections.IList

System.Object