ca1303: لا تمرير القيم الحرفية كمترجم معلمات
TypeName |
CollectionsShouldImplementGenericInterface |
CheckId |
ca1010 |
Category |
Microsoft.تصميم |
تعطيل تغيير |
غير فاصلة |
السبب
يطبق على نوع مرئي خارجياً System.Collections.IEnumerableالواجهة ولكن لا تطبق System.Collections.Generic.IEnumerable<T>الواجهة، و أهداف التجميع الذي يحتوي .NET Framework 2.0. تتجاهل هذه قاعدة أنواع تطبيق System.Collections.IDictionary.
وصف القاعدة
إلى توسيع مدى الاستفادة من مجموعة، قم بتطبيق إحدى الواجهات المجموعة العامة. ثم يمكن استخدام المجموعة إلى تعبئة أنواع المجموعات العامة كالتالي:
كيف إلى الإصلاح انتهاكات
إلى إصلاح انتهاكا لهذه قاعدة، قم بتطبيق إحدى الواجهات المجموعة العامة التالية:
عند إلى منع التحذيرات
هو الأمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة؛ ومع ذلك، أن المجموعة على استخدام محدود أكثر.
مثال انتهاك
الوصف
يلي مثال يظهر فئة (نوع مرجع) مشتقة من عام غير CollectionBaseالفئة، مما ينتهك هذه قاعدة.
الرمز
using System;
using System.Collections;
namespace Samples
{
public class Book
{
public Book()
{
}
}
public class BookCollection : CollectionBase
{
public BookCollection()
{
}
public void Add(Book value)
{
InnerList.Add(value);
}
public void Remove(Book value)
{
InnerList.Remove(value);
}
public void Insert(int index, Book value)
{
InnerList.Insert(index, value);
}
public Book this[int index]
{
get { return (Book)InnerList[index]; }
set { InnerList[index] = value; }
}
public bool Contains(Book value)
{
return InnerList.Contains(value);
}
public int IndexOf(Book value)
{
return InnerList.IndexOf(value);
}
public void CopyTo(Book[] array, int arrayIndex)
{
InnerList.CopyTo(array, arrayIndex);
}
}
}
التعليقات
لإصلاح خرق انتهاك في هذا، يجب أما تطبيق الواجهات العامة أو تغيير فئة الأساس إلى نوع مسبقاً بتنفيذ كل من عام وعام غير الواجهات، مثل Collection<T>class.
إصلاح بواسطة أساس تغيير فئة
الوصف
يلي مثال إصلاح الخرق بتغيير فئة الأساس للمجموعة من class. (CollectionBaseفيCollection<T>) غير عام Collection(Of T)الفئة إلى العامVisual Basic
الرمز
using System;
using System.Collections.ObjectModel;
namespace Samples
{
public class Book
{
public Book()
{
}
}
public class BookCollection : Collection<Book>
{
public BookCollection()
{
}
}
}
التعليقات
يعتبر تغيير فئة الأساس لفئة التي تم إصدارها بالفعل تغيير الامتداد بالعملاء موجود.
إصلاح بواسطة واجهة التطبيق
الوصف
المثال التالي بإصلاح الخرق بتنفيذ هذه الواجهات العام: IEnumerable<T>,ICollection<T>، وIList<T>(IEnumerable(Of T),ICollection(Of T), andIList(Of T)فيVisual Basic).
الرمز
using System;
using System.Collections;
using System.Collections.Generic;
namespace Samples
{
public class Book
{
public Book()
{
}
}
public class BookCollection : CollectionBase, IList<Book>
{
public BookCollection()
{
}
int IList<Book>.IndexOf(Book item)
{
return this.List.IndexOf(item);
}
void IList<Book>.Insert(int location, Book item)
{
}
Book IList<Book>.this[int index]
{
get { return (Book) this.List[index]; }
set { }
}
void ICollection<Book>.Add(Book item)
{
}
bool ICollection<Book>.Contains(Book item)
{
return true;
}
void ICollection<Book>.CopyTo(Book[] array, int arrayIndex)
{
}
bool ICollection<Book>.IsReadOnly
{
get { return false; }
}
bool ICollection<Book>.Remove(Book item)
{
if (InnerList.Contains(item))
{
InnerList.Remove(item);
return true;
}
return false;
}
IEnumerator<Book> IEnumerable<Book>.GetEnumerator()
{
return new BookCollectionEnumerator(InnerList.GetEnumerator());
}
private class BookCollectionEnumerator : IEnumerator<Book>
{
private IEnumerator _Enumerator;
public BookCollectionEnumerator(IEnumerator enumerator)
{
_Enumerator = enumerator;
}
public Book Current
{
get { return (Book)_Enumerator.Current; }
}
object IEnumerator.Current
{
get { return _Enumerator.Current; }
}
public bool MoveNext()
{
return _Enumerator.MoveNext();
}
public void Reset()
{
_Enumerator.Reset();
}
public void Dispose()
{
}
}
}
}
القواعد ذات الصلة
ca1005: تجنب الإفراط معلمات تشغيل الأنواع العامة
ca1000: لا بتعريف الأعضاء ثابتة تشغيل الأنواع العامة
ca1002: لا تعرض القوائم العامة
CA1006: Do not nest generic types in member signatures
ca1004: يجب توفير وظائف عامة معلمة نوع
ca1003: استخدام مثيلات معالج حدث العام
CA1007: Use generics where appropriate