假设有这样一个案例:
var collection = myEnumerable as ICollection<MyType>;
在底层发生了什么?
ICollection
有一个计数属性。这个转换是否枚举可枚举来获取计数,还是会发生更复杂的事情?假设有这样一个案例:
var collection = myEnumerable as ICollection<MyType>;
ICollection
有一个计数属性。这个转换是否枚举可枚举来获取计数,还是会发生更复杂的事情?没有任何反应。如果myEnumerable
确实是一个ICollection<MyType>
,那么collection
将包含它。否则,它将为null
。就这么简单。
IEnumerable
不等同于 ICollection
,它只会转换成 ICollection
并计算元素数量,如果您的实例实际上是一个已经向下转换为 IEnumerable
的 ICollection
,否则将返回 null,这里没有任何神奇的转换。 - Richard Friend重要提示:
无论何时,当您将 IEnumerable
类型对象转换为 ICollection
时,它将成为引用类型。
例如,从集合中删除项目也会从 IEnumerable
集合中删除该项目。
例如:
IEnumerable<AnyClass> enumerableObject;
ICollection<AyClass> collectingObject = (ICollection<AnyClass>)enumerableObject;
foreach(var item in collectingObject){
collectingObject.Remove(item);
}
如果您访问enumerableObject
的值,您会发现它已更新,并且所有值都已删除。