我在使用这个简单的代码时遇到了问题,我不明白为什么 c# 会这样。
问题似乎是 c# 在 Lists 中使用 Lists 时使用的是 Linq 表达式引用而不是值。
在数字循环中,我根据列表选择数字,它们都存在,因此所有数字都应添加到列表 {1,2,3} 中。
当您看到控制台的输出时,行为正常,它在数字循环内显示 {1,2,3}。
问题出在列表的循环上,在这里,Linq 似乎只将最后一个数字添加到列表中,因此它输出 {3,3,3}。
我知道我不需要列表中的整数列表,但这只是为了证明一点,这很奇怪,这是一个已知的“错误”吗?
编辑:这似乎是它在 5.0 之前的 c# 中应该如何工作。在 C# 5.0(VS2012+ 编译器)中,此行为已修改为我所期望的
static void Main()
{
var list = new List<IEnumerable<int>>();
var numbers = new[] {1, 2, 3};
var numbers2 = new[] {1, 2, 3};
foreach (var number in numbers)
{
var result = from s in numbers2
where s == number
select s;
Console.WriteLine(result.First()); // outputs {1,2,3}
list.Add(result);
}
foreach (var num in list)
{
Console.WriteLine(num.First()); // outputs {3,3,3}
}
}
输出
1 2 3 3 3 3