集合接口与标准查询操作符详解
在编程中,对集合进行操作是非常常见的需求,而标准查询操作符为我们提供了强大而便捷的方式来处理集合数据。下面将详细介绍集合操作中的一些关键概念和方法。
1. 编译器的“鸭子类型”
编译器使用“鸭子类型”的概念。当没有找到 IEnumerable/IEnumerable<T> 方法时,它会查找 GetEnumerator() 方法,该方法返回一个具有 Current() 和 MoveNext() 方法的类型。“鸭子类型”是通过方法名来搜索方法,而不是依赖接口或显式的方法调用。
2. foreach 迭代时不要修改集合
在 foreach 迭代过程中,编译器会阻止对 foreach 变量进行赋值。例如,对 foreach 变量的赋值并不会改变集合元素本身,所以 C# 编译器会完全阻止这样的赋值。
此外,在 foreach 循环执行期间,通常不能修改集合中的元素数量或元素本身。如果在 foreach 循环内调用 stack.Push(42) ,迭代器是否应该忽略或包含对 stack 的更改就会产生歧义。由于这种歧义,如果在 foreach 循环内修改了集合,访问枚举器时通常会抛出 System.InvalidOperationExcep
超级会员免费看
订阅专栏 解锁全文
5289

被折叠的 条评论
为什么被折叠?



