呃,不太清楚如何表达这个但是..
给定一个使用 yield return 创建的 IEnumerable,包含一个类的三个实例,为什么调用 .First() 似乎返回第一个实例的“副本”?
见以下代码;
public class Thing
{
public bool Updated { get; set; }
public string Name { get; private set; }
public Thing(string name)
{
Name = name;
}
public override string ToString()
{
return string.Format("{0} updated {1} {2}", Name, Updated, GetHashCode());
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("IEnumerable<Thing>");
var enumerableThings = GetThings();
var firstThing = enumerableThings.First();
firstThing.Updated = true;
Console.WriteLine("Updated {0}", firstThing);
foreach (var t in enumerableThings)
Console.WriteLine(t);
Console.WriteLine("IList<Thing>");
var thingList = GetThings().ToList();
var thing1 = thingList.First();
thing1.Updated = true;
Console.WriteLine("Updated {0}", thing1);
foreach (var t in thingList)
Console.WriteLine(t);
Console.ReadLine();
}
private static IEnumerable<Thing> GetThings()
{
for (int i = 1; i <= 3; i++)
{
yield return new Thing(string.Format("thing {0}", i));
}
}
}
}
运行它会产生以下输出;
IEnumerable<Thing>
Updated thing 1 updated True 37121646
thing 1 updated False 45592480
thing 2 updated False 57352375
thing 3 updated False 2637164
IList<Thing>
Updated thing 1 updated True 41014879
thing 1 updated True 41014879
thing 2 updated False 3888474
thing 3 updated False 25209742
但我希望 IList 和 IEnmerable 表现相同并像这样输出......
IEnumerable<Thing>
Updated thing 1 updated True 45592480
thing 1 updated False 45592480
thing 2 updated False 57352375
thing 3 updated False 2637164
IList<Thing>
Updated thing 1 updated True 41014879
thing 1 updated True 41014879
thing 2 updated False 3888474
thing 3 updated False 25209742
我错过了什么?!