1

次のコードは、名前がその値よりも短い数字を返します。index が要素の配列インデックスであることを LINQ がどのように理解しているのか理解できません。誰か説明してくれませんか...

 string[] digits = { "zero", "one", "two", "three", "four", 
                     "five", "six", "seven", "eight", "nine" };

 var shortDigits = digits.Where((digit, index) => digit.Length < index);
4

2 に答える 2

3

index が要素の配列インデックスであることを linq がどのように理解しているのか理解できません。

常にvalue と indexが与えられる述語を取るオーバーロードを呼び出しています。それがそのオーバーロードの全体的な目的です。

predicateパラメータのドキュメントから:

各ソース要素の条件をテストする関数。関数の 2 番目のパラメーターは、ソース要素のインデックスを表します。

于 2012-07-04T14:19:41.063 に答える
0

その背後に魔法はありません。のこの特定のオーバーロードはWhere、内部的に次のようなことを行います。

var index = 0;
foreach (var item in collection)
{
    if (predicate(item, index++)) {
        yield return item;
    }
}

wherepredicateは渡すラムダで、collectionは数字の配列です。

于 2012-07-04T14:20:41.170 に答える