CA1006: Nelze vnořit obecné typy v podpisech členské
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: Vyhnout se nadměrnému parametry na obecné typy
CA1010: Kolekce by mělo provádět obecné rozhraní
CA1000: Nelze deklarovat statické členy na obecné typy
CA1002: Obecný seznamech neuvádějí.
CA1004: Obecné metody by měl poskytnout parametr typu
CA1003: Použít událost obecný popisovač instance
CA1007: Pomocí generics, případně