我想計算IEnumerable列表中的元素的排名並將其分配給成員。但下面的代碼僅在第一次調用時才起作用。第二次通話從最後一個等級值開始。因此,而不是輸出012和012,我得到012和345如何計算IEnumerable的排名<T>並將其存儲在T類型中
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
+1,但你仍然應該返回's',不是嗎? – Cameron 2012-04-28 13:52:59
+1,謝謝你的提示 – 2012-04-28 13:56:10
這個工作!謝謝。我從哪裏來? – Ankush 2012-04-28 13:57:08