Aracılığıyla paylaş


CA1038: Numaralandırıcıların türü kesin olarak belirtilmelidir

TypeName

EnumeratorsShouldBeStronglyTyped

CheckId

CA1038

Kategori

Microsoft.Design

Değişiklik kesiliyor

Bölme

Neden

Ortak veya korumalı türünü uygulayan IEnumerator türü kesin belirlenmiş sürümünü sağlamaz, ancak IEnumerator.Current özelliği.Bu kuraldan muaf aşağıdaki türden türetilen türler şunlardır:

Kural Tanımı

Bu kural gerektirir IEnumerator de türsüz bir sürümünü sağlamak için uygulamaları Current özelliği, böylece kullanıcı arabirimi tarafından sağlanan işlevselliği kullandığınızda güçlü tipine dönüş değeri atama yapmak için gerekli değildir.Bu kural türünü uygulayan varsayar IEnumerator 'den daha güçlü bir türü örnekleri topluluğu içeren Object.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltmek için arabirim özelliği açıkça kullanın (olarak bildirmek IEnumerator.Current).Bir özellik olarak bildirilmiş, ortak türü kesin belirlenmiş sürümünü eklemek Current, ve bu türü kesin belirlenmiş bir nesne döndürür.

Uyarıları ne zaman

Nesne tabanlı bir numaralayıcı bir ikili aðaç gibi bir nesne tabanlı koleksiyonu ile kullanılmak üzere geliştirdiğinizde bu kuraldan bir uyarı göstermez.Yeni koleksiyon genişletmek türleri türsüz bir numaralayıcı tanımlamak ve türsüz özelliğini kullanır.

Örnek

Türü kesin belirlenmiş uygulamak için doğru şekilde aşağıdaki örnekte gösterilmiştir IEnumerator türü.

using System;
using System.Collections;
namespace DesignLibrary
{
   // The ExceptionEnumerator class implements a strongly typed enumerator  
   // for the ExceptionCollection type. 

   public class ExceptionEnumerator: IEnumerator
   {
      private IEnumerator myCollectionEnumerator;

      private ExceptionEnumerator () {}

      public ExceptionEnumerator(ExceptionCollection collection)
      {
         myCollectionEnumerator = collection.data.GetEnumerator();
      }

      // Implement the IEnumerator interface member explicitly. 
      object IEnumerator.Current
      {
         get 
         {
            return myCollectionEnumerator.Current;
         }
      }

      // Implement the strongly typed member. 
      public Exception Current
      {
         get 
         {
            return (Exception) myCollectionEnumerator.Current;
         }
      }

      // Implement the remaining IEnumerator members. 
      public bool MoveNext ()
      {
         return myCollectionEnumerator.MoveNext();
      }

      public void Reset ()
      {
         myCollectionEnumerator.Reset();
      }
   }

   public class ExceptionCollection : ICollection
   {   
      internal ArrayList data;

      ExceptionCollection()
      {
         data = new ArrayList();
      }

      // Provide the explicit interface member for ICollection. 
      void ICollection.CopyTo(Array array, int index)
      {
         data.CopyTo(array, index);
      }

      // Provide the strongly typed member for ICollection. 
      public void CopyTo(Exception[] array, int index)
      {
         ((ICollection)this).CopyTo(array, index);
      }

      // Implement the rest of the ICollection members. 
      public int Count
      {
        get 
        {
           return data.Count;
        }
      }

      public object SyncRoot
      {
         get 
        {
           return this; 
        }
      }

      public bool IsSynchronized
      {
         get 
         {
            return false; 
         }
      }

      // The IEnumerable interface is implemented by ICollection.
      IEnumerator IEnumerable.GetEnumerator()
      {
         return new ExceptionEnumerator(this);
      }

      public ExceptionEnumerator GetEnumerator()
      {
         return new ExceptionEnumerator(this);
      }
   }
}

İlgili kuralları

CA1035: ICollection uygulamalarında türü kesin olarak belirtilmiş üyeler olmalıdır

CA1039: Listelerin türü kesin olarak belirlenmiştir

Ayrıca bkz.

Başvuru

IEnumerator

CollectionBase

DictionaryBase

ReadOnlyCollectionBase