x =>の説明x.ToString()//非常に多くの呼び出しを簡素化
質問
質問の回答で、次のコーディングのヒントを見つけました:-
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();
}
所属していません StackOverflow