我想计算 IEnumerable 列表中元素的等级并将其分配给成员。但下面的代码仅在第一次调用时才有效。第二次调用从最后一个排名值开始。所以我得到的是 012 和 345 而不是输出 012 和 012
class MyClass
{
public string Name { get; set; }
public int Rank { get; set; }
}
public void SecondTimeRankEvaluvate()
{
MyClass[] myArray = new MyClass[]
{
new MyClass() { Name = "Foo" },
new MyClass() { Name = "Bar" },
new MyClass() { Name = "Baz" }
};
int r = 0;
var first = myArray.Select(s => { s.Rank = r++; return s; });
foreach (var item in first)
{
Console.Write(item.Rank);
}
// Prints 012
Console.WriteLine("");
foreach (var item in first)
{
Console.Write(item.Rank);
}
// Prints 345
}
我知道该变量r
在第二次调用时被捕获(关闭)并重用。我不想要那种行为。有什么干净的方法来计算排名并分配它吗?变量(在r
实际代码中)也不在foreach
存在循环的同一范围内。它在一个返回的函数中var first