0

誰でもマイクロソフトの次のLINQサンプルコードを説明できますか...

ラムダ式の ( digit, index ) 部分を理解するのに苦労しています:

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

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

    Console.WriteLine("Short digits:");
    foreach (var d in shortDigits)
    {
        Console.WriteLine("The word {0} is shorter than its value.", d);
    }
}
4

3 に答える 3

2

ラムダ式の (数字、インデックス) 部分を理解するのに苦労しています:

には 2 つのオーバーロードがありますWhere。1 つはシーケンス タイプのインスタンスを にマッピングする述語を取り、もう 1 つはbool(シーケンス タイプのインスタンス、シーケンス内のインデックス) の述語マッピングのペアを bool に取ります。これは、次のようなことが言えるようにするためです。

sequence.Where((x, index) => index % 2 == 0 && x.Length > 5))

つまり、インデックスが偶数で長さが 5 を超えるシーケンス内のすべてのアイテムを教えてください。

この例では:

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

私たちが言っているのは、項目の長さがシーケンス内の位置よりも短いシーケンス内のすべての項目、つまり、長さがそれが表す値よりも短いすべての数字を教えてくださいということです。

于 2013-05-30T14:35:37.583 に答える
1

これらはラムダ式のパラメーターです。

コンパイラは、ラムダが使用されているデリゲートに基づいて型を推測します。
この場合、それFunc<T, int, bool>Where()過負荷によるものです。

于 2013-05-30T14:32:54.713 に答える
1

ラムダ式は、疑似コードを記述するためのショートカットです。

bool FunctionWithNoName(string digit, int index)
{
 return (digit.Length < index);
}
于 2013-05-30T14:36:15.080 に答える