mal*_*lay 0 c# ienumerable foreach
我有一个foreach如下的循环
foreach (XYZ split in this.splits )
{
// this code is inserted for debug purpose only
bool check = object.ReferenceEquals(splits.First(), split);
.....
}
Run Code Online (Sandbox Code Playgroud)
当我有单个元素时this.splits,检查返回false.我通过其他方式检查,检查总是返回false.知道为什么会这样吗?
取决于枚举器的实现方式.实现可以自由返回副本或对象本身.事实上,它可以回报任何它喜欢的东西; 例如,Enumerable.Range返回一个数字序列,并且没有任何元素实际存储在任何地方.它们是在运行中生成的.如果返回类型是值类型,它肯定是某种东西的副本.
此外,没有任何东西要求对象每次GetEnumerator调用它时都返回相同的序列.在您的代码示例中,它会foreach在您调用时执行一次.First.这些序列不需要是等同的.