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

TypeName

ListsAreStronglyTyped

CheckId

ca1039

Category

Microsoft.تصميم

تعطيل تغيير

فصل

السبب

نوع عامة أو محمية بتنفيذ System.Collections.IListولكن لا توفر أسلوباً مكتوب بشدة لواحد أو المزيد التالية:

  • IList.العنصر

  • IList.إضافة

  • IList.يحتوي على

  • IList.IndexOf

  • IList.إدراج

  • IList.إزالة

وصف القاعدة

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

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

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

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

إلى إصلاح انتهاكا لهذه قاعدة، تطبيق بوضوح IListالأعضاء وتوفير بدائل مكتوب بشدة للأعضاء بتدوينه سابقا. للتعليمات البرمجية الذي يعمل بشكل صحيح على IListواجهة و يوفر المطلوبة الأعضاء مكتوب بشدة، راجع المثال التالي.

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

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

مثال

في المثال التالي، نوع YourTypeيمتد System.Collections.CollectionBase، كـ يجب أن الجميع مجموعات مكتوب بشدة. لاحظ أن CollectionBaseيوفر تطبيق صريح IListواجهة نيابة عنك، لذا تحتاج فقط بتوفير الأعضاء مكتوب بشدة ل IListو ICollection.

using System;
using System.Collections;
namespace DesignLibrary
{
   public class YourType
   {
      // Implementation for your strong type goes here.

      public YourType() {}
   }

   public class YourTypeCollection : CollectionBase
   {
      // Provide the strongly typed members for IList.
      public YourType this[int index]
      {
         get 
         {
            return (YourType) ((IList)this)[index];
         }
         set 
         {
            ((IList)this)[index] =  value;
         }
      }

      public int Add(YourType value)
      {
         return ((IList)this).Add ((object) value);
      }

      public bool Contains(YourType value) 
      {
         return ((IList)this).Contains((object) value);
      }

      public void Insert(int index, YourType value) 
      {
         ((IList)this).Insert(index, (object) value);
      }

      public void Remove(YourType value) 
      {
         ((IList)this).Remove((object) value);
      }

      public int IndexOf(YourType value) 
      {
         return ((IList)this).IndexOf((object) value);
      }

      // Provide the strongly typed member for ICollection.

      public void CopyTo(YourType[] array, int index)
      {
         ((ICollection)this).CopyTo(array, index);
      }
   }
}

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

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

CA1038: Enumerators should be strongly typed

راجع أيضًا:

المرجع

System.Collections.CollectionBase

System.Collections.ICollection

System.Collections.IEnumerable

System.Collections.IList

System.Object