Aracılığıyla paylaş


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

Ayrıca bkz.

Başvuru

Genel Türler (C# Programlama Kılavuzu)