IEnumerableリストの要素のランクを計算し、そのメンバーに割り当てる必要があります。しかし、以下のコードは1回目の呼び出し時にのみ機能します。 2回目のコールは、最後のランク値から開始します。だからではなく、出力012と012の、私は、変数r
は(閉鎖)を捕獲し、2回目と呼ばれたときに再利用されていることを理解し012と345IEnumerable <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
変数は(実際のコードで)foreach
ループが存在するのと同じスコープにありません。 var first
+1ですが、まだ 's'を返す必要がありますか? – Cameron
+1、ありがとうございます –
これはうまくいきました!ありがとう。私はどこから来たのですか? – Ankush