CA1006: Não aninhar tipos genéricos em assinaturas de membro
Item | Valor |
---|---|
RuleId | CA1006 |
Categoria | Microsoft.Design |
Alteração da falha | Quebra |
Causa
Um membro visível externamente tem uma assinatura que contém um argumento de tipo aninhado.
Descrição da regra
Um argumento de tipo aninhado é um argumento de tipo que também é um tipo genérico. Para chamar um membro cuja assinatura contenha um argumento de tipo aninhado, o usuário deve criar uma instância de um tipo genérico e passar esse tipo para o construtor de um segundo tipo genérico. O procedimento e a sintaxe obrigatórios são complexos e devem ser evitados.
Como corrigir violações
Para corrigir uma violação dessa regra, altere o design para remover o argumento de tipo aninhado.
Quando suprimir avisos
Não suprima um aviso nessa regra. Fornecer genéricos em uma sintaxe fácil de entender e usar reduz o tempo necessário para aprender e aumenta a taxa de adoção de novas bibliotecas.
Exemplo
O exemplo a seguir mostra um método que viola a regra e a sintaxe necessária para chamar o método responsável pela violação.
using System;
using System.Collections.Generic;
namespace DesignLibrary
{
public class IntegerCollections
{
public void NotNestedCollection(ICollection<int> collection)
{
foreach(int i in collection)
{
Console.WriteLine(i);
}
}
// This method violates the rule.
public void NestedCollection(
ICollection<ICollection<int>> outerCollection)
{
foreach(ICollection<int> innerCollection in outerCollection)
{
foreach(int i in innerCollection)
{
Console.WriteLine(i);
}
}
}
}
class Test
{
static void Main()
{
IntegerCollections collections = new IntegerCollections();
List<int> integerListA = new List<int>();
integerListA.Add(1);
integerListA.Add(2);
integerListA.Add(3);
collections.NotNestedCollection(integerListA);
List<int> integerListB = new List<int>();
integerListB.Add(4);
integerListB.Add(5);
integerListB.Add(6);
List<int> integerListC = new List<int>();
integerListC.Add(7);
integerListC.Add(8);
integerListC.Add(9);
List<ICollection<int>> nestedIntegerLists =
new List<ICollection<int>>();
nestedIntegerLists.Add(integerListA);
nestedIntegerLists.Add(integerListB);
nestedIntegerLists.Add(integerListC);
collections.NestedCollection(nestedIntegerLists);
}
}
}
Regras relacionadas
CA1005: Evitar parâmetros excessivos em tipos genéricos
CA1010: Coleções devem implementar uma interface genérica
CA1000: Não declarar membros estáticos em tipos genéricos
CA1002: Não expor listas genéricas
CA1004: Métodos genéricos devem fornecer um parâmetro de tipo
CA1003: Usar instâncias do manipulador de eventos genérico
CA1007: Usar genéricos quando apropriado
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários