質問

質問の回答で、次のコーディングのヒントを見つけました:-

2)1つのパラメーターを持つ単純なラムダ:

x => x.ToString() //simplify so many calls

3.0をまだ使用していない人として、私はこのヒントを本当に理解していませんが、興味深いように見えます。

ラムダを研究したので、それらが何をするかを考えるがわかっているが、少し完全に理解していないので、少し解凍することも順番になります。

役に立ちましたか?

解決

単一のパラメーターを持つデリゲートのインスタンスを作成する必要がある場合、ラムダ式を使用すると、そのデリゲート" inline"を作成できます。非常に簡潔な方法で。たとえば、名前でリスト内の特定の人を見つけるためのコードは次のとおりです。

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");

C#2.0では、少し長めの匿名メソッドを使用できますが、あまりにも悪いことはありません:

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });

C#1.0では、追加のメソッド全体を作成する必要があります。さらに、パラメータ化する場合は別の型を作成する必要がありますが、匿名メソッドとラムダ式は実行環境(ローカル変数など)をキャプチャするため、クロージャのように動作します。

public Person FindByName(List<Person> list, String name)
{
    return list.Find(p => p.Name == name); // The "name" variable is captured
}

これについては、閉鎖に関する私の記事に記載されています。

メソッドにデリゲートを渡すことは、C#2.0および.NET 2.0ではそれほど一般的ではありませんが、LINQの基礎の大部分です。したがって、C#3.0 .NET 3.5で多く使用する傾向があります。

他のヒント

これは基本的に次のように展開されます:

private string Lambda(object x) {
  return x.ToString();
}

C#2.0の匿名メソッドに精通していますか?これら2つの呼び出しは同等です(SomeMethodがデリゲートなどを受け入れると仮定):

SomeMethod(x => x.ToString());

SomeMethod(delegate (SomeType x) { return x.ToString();});

どちらを入力したいかがわかります...

string delegate(TypeOfX x)
{
  return x.ToString();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top