2

有什么特别的原因可以解释为什么 和 的通用对应物IList没有ICollection相同的方法和属性集?他们似乎把他们搬来搬去。

前任。 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; }
4

2 回答 2

0

IList<T>implements ICollection<T>,所以至少在一个上下文中,IList<T>哪个接口有什么并不重要。至于为什么,谁知道那个疯狂的 .NET 团队在想什么。但是,只要这些方法不在索引“列表”的上下文中,“集合”就需要添加、删除、检查其内容等方法,这似乎是合乎逻辑的。一旦你开始从概念上讨论列表,你就可以添加索引,这需要索引器本身,以及索引敏感的方法来添加、删除和检查元素。

于 2011-05-12T19:07:06.903 回答
0

我认为主要的设计决定归结为 .Net 中的数组实际上都是IList<T>隐式实现的。来自IList诸如Remove和的许多方法Clear不适用于数组,因此它们被移动到不同的接口。

于 2011-05-12T19:17:06.667 回答