Instrument a Statically Compiled ASP.NET Web Application and Collect Memory Data by Using the Profiler Command Line Instrument a Statically Compiled ASP.NET Application and Collect Memory Data

TypeName

ICollectionImplementationsHaveStronglyTypedMembers

CheckId

ca1035

Category

Microsoft.تصميم

تعطيل تغيير

فصل

السبب

System.Collections.ICollectionولكن لا توفر طريقة مكتوب بشدة بتطبيق نوع عامة أو محمية ICollection.CopyTo. الإصدار مطبوع بشدة CopyToيجب أن يقبل معلمتين ولا يمكن أن يكون System.Arrayأو صفيفة من System.Objectكبه أول معلمة.

وصف القاعدة

تتطلب هذه قاعدة ICollectionتطبيقات لتوفير بشدة بكتابة الأعضاء حيث يمكن للمستخدمين غير مطلوب تحويل وسائط Objectنوع عند استخدام الوظيفة الموفرة من قبل الواجهة. Th هو يفترض قاعدة التي النوع الذي يطبق ICollectionعدم بذلك لإدارة مجموعة من مثيلات من النوع الذي هو أقوى من Object.

ICollectionيطبقSystem.Collections.IEnumerableواجهة. في حالة توسيع الكائنات في المجموعة System.ValueType، فيجب عليك توفير عضو مكتوب بشدة ل GetEnumeratorلتجنب فقدان الأداء تسببها تحويل إلى كائن; th هو هو غير مطلوب إذا كانت الكائنات المجموعة هي نوع مرجع.

لتنفيذ مكتوب بشدة الإصدار عضو واجهة تطبيق الأعضاء الواجهة بشكل صريح باستخدام الأسماء في نموذج InterfaceName.InterfaceMemberName، مثل CopyTo. يستخدم الأعضاء واجهة واضحة أنواع بيانات تعريف بواسطة الواجهة. قم بتطبيق الأعضاء مكتوب بشدة باستخدام اسم العضو الواجهة، مثل CopyTo. تعريف الأعضاء مكتوب بشدة كالعامة، وتعريف معلمات وقيم الإرجاع إلى تكون من نوع قوي إدارتها من قبل المجموعة. استبدال أنواع قوية الضعيفة أنواع مثل كـ Objectو Arrayالتصريح بواسطة واجهة.

كيف إلى الإصلاح انتهاكات

إلى إصلاح انتهاكا لهذه قاعدة، قم بتطبيق واجهة العضو بوضوح (التصريح ك CopyTo). إضافة عضو مكتوب بشدة العام، بتعريف كـ CopyTo، وأنها تأخذ صفيفة مكتوب بشدة كـ به معلمة الأولى.

عند إلى منع التحذيرات

منع ظهور تحذير من هذه قاعدة عند تطبيق مجموعة object-bكـed جديدة، مثل كـ شجرة ثنائية، الموقع تحدد أنواع التي تتزايد في المجموعة الجديدة لنوع قوي. يجب أن تلتزم هذه الأنواع بهذه قاعدة و كشف الأعضاء مكتوب بشدة.

مثال

يوضح المثال التالي طريقة الصحيح إلى تنفيذ ICollection.

using System;
using System.Collections;
namespace DesignLibrary
{

   public class ExceptionCollection : ICollection
   {   
      private 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.
      // Because the type underlying this collection is a reference type,
      // you do not need a strongly typed version of GetEnumerator.

      public IEnumerator GetEnumerator()
      {
         return data.GetEnumerator();
      }
   }
}

القواعد ذات الصلة

CA1038: Enumerators should be strongly typed

ca1039: قوائم تمت كتابتها بشدة

راجع أيضًا:

المرجع

System.Array

System.Collections.IEnumerable

System.Collections.ICollection

System.Object