Ank*_*ush 0 c# closures captured-variable
我想计算IEnumerable列表中元素的等级并将其分配给成员.但是下面的代码仅在第一次调用时起作用.第二次通话从最后一个等级值开始.所以我没有输出012和012,而是输入了012和345
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
}
Run Code Online (Sandbox Code Playgroud)
我知道变量r被捕获(闭包)并在第二次调用时重用.我不希望这种行为.是否有任何干净的方法来计算排名并分配它?也r变量(在实际的代码)不是在同一范围内,其中foreach环是存在的.它是一个返回的功能var first
var first = myArray.Select((s, i) => { s.Rank = i; return s; });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |