CA1006: Üye imzalarında genel türleri iç içe kullanmayın
TypeName |
DoNotNestGenericTypesInMemberSignatures |
CheckId |
CA1006 |
Kategori |
Microsoft.Design |
Değişiklik kesiliyor |
Bölme |
Neden
Dışarıdan görünür bir üye iç içe türü bağımsız değişkeni içeren imza var.
Kural Tanımı
Aynı zamanda genel bir türü olan bir tür bağımsız değişkeni bir iç içe türü bağımsız değişkenidir.Kullanıcı, imzası bir iç içe türü bağımsız değişkeni içeren üye çağırmak için genel bir tür örneğini oluşturabilir ve bu tür ikinci bir genel tür kurucusuna aktarmalısınız gerekir.Gerekli sözdizimi karmaşık ve kaçınılmalıdır.
İhlalleri düzeltmek nasıl
Bu kuralı ihlal düzeltmek için iç içe türü bağımsız değişkeni kaldırmak için Tasarım değiştirme.
Uyarıları ne zaman
Uyarı Bu kuraldan bastırmak değil.Generics kolayca anlamak ve kullanmak bir sözdizimi sağlar yeni kitaplıklar Adaptasyon hızı artar, öğrenmek için gerekli zamanı azaltır.
Örnek
Aşağıdaki örnekte, kuralını ihlal eden bir yöntem ve ihlal eden yöntemini çağırmak için gerekli sözdizimi gösterilmektedir.
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);
}
}
}
İlgili kuralları
CA1005: Genel türlerde aşırı parametrelerden kaçının
CA1010: Koleksiyonlar genel arabirim uygulamalıdır
CA1000: Genel türlerde statik üyeleri belirtme
CA1002: Genel listeleri gösterme
CA1004: Genel yöntemler tür parametresi sağlamalıdır
CA1003: Genel olay işleyici örnekleri kullan
CA1007: Uygun yerlerde genel türler kullanın