Foreach在什么情况下使用ref,在什么情况下使用副本?
using System;
using System.Linq;
class A {
public int v;
}
class Program
{
static void Main() {
var ints = new int[] { 0, 1, 2 };
var array = ints.Select(i=>new A {v = i}).ToArray();
foreach(var a in array) {
a.v = 999;
}
var enumerable = ints.Select(i=>new A {v = i});
foreach(var a in enumerable) {
a.v = 999;
}
Console.WriteLine($"array.First = {array.First().v}");
Console.WriteLine($"enumerable.First = {enumerable.First().v}");
}
}
Jdoodle.com/ia/jce
输出:
array.First = 999
enumerable.First = 0
似乎在foreach(var a in enumerable) {
a中,a是复制而不是引用,而在foreach(var a in array) {
a中,a是引用.
有没有人能解释一下这个?