【发布时间】:2021-11-29 11:26:21
【问题描述】:
我定义了一个Order 类如下:
public class Order
{
public int Id { get; set; }
public string OrdNumber { get; set; }
}
var dict = new Dictionary<int, string>();
dict.Add(1, "ORD1");
dict.Add(2, "ORD2");
var orders = dict.Select(a => new Order { Id = a.Key, OrdNumber = a.Value });
我写了以下代码来更新Order号码:
foreach (var ord in orders)
{
ord.OrdNumber = ord.OrdNumber + "*";
Console.WriteLine(ord.OrdNumber);
}
代码按预期执行,输出为:
ORD1*
ORD2*
但如果我在上面显示的foreach 之后添加以下foreach:
foreach (var ord in orders)
{
Console.WriteLine(ord.OrdNumber);
}
结果是:
ORD1
ORD2
完整的代码是:
var dict = new Dictionary<int, string>();
dict.Add(1, "ORD1");
dict.Add(2, "ORD2");
var orders = dict.Select(a => new Order { Id = a.Key, OrdNumber = a.Value });
foreach (var ord in orders)
{
ord.OrdNumber = ord.OrdNumber + "*";
Console.WriteLine(ord.OrdNumber);
}
foreach (var ord in orders)
{
Console.WriteLine(ord.OrdNumber);
}
输出是:
ORD1*
ORD2*
ORD1
ORD2
将.ToList() 添加到下一行的末尾:
dict.Select(a => new Order { Id = a.Key, OrdNumber = a.Value })
解决了这个问题。现在的输出将是:
ORD1*
ORD2*
ORD1*
ORD2*
谁能解释为什么会这样?
【问题讨论】:
标签: c# list ienumerable