Почему общие аналоги IList и ICollection не имеют одинакового набора методов? - PullRequest
2 голосов
/ 12 мая 2011

Есть ли конкретная причина, по которой общие аналоги IList и ICollection не имеют одинакового набора методов и свойств? Похоже, они переместили их.

Ex. IList<T> имеет

int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
T this[int index] { get; set; }

Но IList имеет

int Add(object value);
void Clear();
bool Contains(object value);
int IndexOf(object value);
void Insert(int index, object value);
void Remove(object value);
void RemoveAt(int index);
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this[int index] { get; set; }

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

Я думаю, что главное дизайнерское решение сводилось к тому, что массивы в .Net фактически все неявно реализуют IList<T>.Многие методы из IList, такие как Remove и Clear, не применяются к массивам, поэтому они были перемещены в другой интерфейс.

0 голосов
/ 12 мая 2011

IList<T> реализует ICollection<T>, поэтому, по крайней мере, в контексте IList<T> не имеет значения, какой интерфейс имеет что.Почему, кто знает, что происходит в головах этой сумасшедшей команды .NET?Тем не менее, кажется логичным, что «коллекции» потребуются методы для добавления, удаления, проверки ее содержимого и т. Д. КАК ДОЛГО КАК эти методы не находятся в контексте индексированного «списка».Как только вы начинаете концептуально говорить о списке, вы добавляете индексирование, для чего требуется сам индексатор, и чувствительные к индексам методы для добавления, удаления и проверки элементов.

...