0

以下の例では、具体的には関数の 2 番目のステートメントで、ラムダ関数に渡される「n」パラメーターは何ですか。コードの文脈から、数字リストを指していると思います。しかし、コードのコンテキストから推測する代わりに、どうすればこれを決定的に知ることができますか?

//simple example of lambda expression.
public static void SimpleLambdExpression()
{
    List<int> numbers = new List<int>{1,2,3,4,5,6,7};
    var evens = numbers.FindAll(n => n % 2 == 0);
    var evens2 = numbers.FindAll((int n) => { return n % 2 == 0; });
    ObjectDumper.Write(evens);
    ObjectDumper.Write(evens2);
}
4

3 に答える 3

5

ドキュメントhttp://msdn.microsoft.com/en-us/library/fh1w7y8z.aspxから:

Predicate は、渡されたオブジェクトがデリゲートで定義された条件と一致する場合に true を返すメソッドへのデリゲートです。現在の List の要素は Predicate デリゲートに個別に渡され、条件に一致する要素が返された List に保存されます。

したがってn、 は の要素ですnumbers

于 2013-10-15T18:22:42.847 に答える
0

の署名からそれを取得しますFindAll

public List<T> FindAll(
    Predicate<T> match
)

どこPredicate<T>ですか

public delegate bool Predicate<in T>(
    T obj
)

そのため、入力 (この場合は)FindAllを持つ関数を受け取り、を返します。のドキュメントには、リスト内の各項目が関数に渡されることが記載されています。 TintboolFindAll

于 2013-10-15T18:25:53.267 に答える
0

拡張メソッドは次のFindAllように記述できます (理解に役立つ場合)。

IEnumerable<int> FindAll(IEnumerable<int> source, Predicate<int> predicate)
{
    List<int> result = new List<int>();
    foreach (int item in source)
    {
        if (predicate(item))
        {
            result.Add(item);
        }
    }

    return result;
}

したがって、ラムダ式の変数は、このメソッドnの変数と同じです。item

于 2013-10-15T18:26:32.240 に答える