CA1006: Nevnořujte obecné typy v signaturách členu
Název_typu |
DoNotNestGenericTypesInMemberSignatures |
CheckId |
CA1006 |
Kategorie |
Microsoft.design |
Změnit rozdělení |
Rozdělení |
Příčina
Externě viditelné člen má podpis, který obsahuje vnořený typ argumentu.
Popis pravidla
Vnořený typ argumentu je argument typ, který je také obecného typu.Chcete-li volat člen, jehož podpis obsahuje vnořený typ argumentu musí uživatel konkretizovat jeden obecný typ a předat konstruktoru druhý obecný typ tohoto typu.Požadovanou proceduru a syntaxe jsou složité a je třeba se vyhnout.
Jak opravit porušení
Porušení tohoto pravidla opravit, změňte návrh Odstranit vnořený typ argumentu.
Při potlačení upozornění
Nepotlačovat upozornění od tohoto pravidla.Poskytování generics v syntaxi, která je snadné pochopení a použití snižuje dobu požadované informace a zvyšuje rychlost přijímání nových knihoven.
Příklad
Následující příklad ukazuje metodu, která porušují pravidlo a syntaxi, která je nutné volat metodu porušení.
Imports System
Imports System.Collections.Generic
Namespace DesignLibrary
Public Class IntegerCollections
Sub NonNestedCollection(collection As ICollection(Of Integer))
For Each I As Integer In DirectCast( _
collection, IEnumerable(Of Integer))
Console.WriteLine(I)
Next
End Sub
' This method violates the rule.
Sub NestedCollection( _
outerCollection As ICollection(Of ICollection(Of Integer)))
For Each innerCollection As ICollection(Of Integer) In _
DirectCast(outerCollection, _
IEnumerable(Of ICollection(Of Integer)))
For Each I As Integer In _
DirectCast(innerCollection, IEnumerable(Of Integer))
Console.WriteLine(I)
Next
Next
End Sub
End Class
Class Test
Shared Sub Main()
Dim collections As New IntegerCollections()
Dim integerListA As New List(Of Integer)()
integerListA.Add(1)
integerListA.Add(2)
integerListA.Add(3)
collections.NonNestedCollection(integerListA)
Dim integerListB As New List(Of Integer)()
integerListB.Add(4)
integerListB.Add(5)
integerListB.Add(6)
Dim integerListC As New List(Of Integer)()
integerListC.Add(7)
integerListC.Add(8)
integerListC.Add(9)
Dim nestedIntegerLists As New List(Of ICollection(Of Integer))()
nestedIntegerLists.Add(integerListA)
nestedIntegerLists.Add(integerListB)
nestedIntegerLists.Add(integerListC)
collections.NestedCollection(nestedIntegerLists)
End Sub
End Class
End Namespace
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);
}
}
}
Souvisejících pravidel
CA1005: Vyhněte se nadbytečným parametrům na obecných typech
CA1010: Kolekce musí implementovat obecné rozhraní
CA1000: Nedeklarujte statické členy v obecných typech
CA1002: Nezveřejňujte obecné seznamy
CA1004: Obecné metody by měly poskytnout parametr typu
CA1003: Použijte instance obecných obslužných rutin události
CA1007: Použijte obecné typy, kde je to vhodné