(コードは一例であることに注意してください)のsomeMethod(()=> x.Something)C#で意味
私は、次の構文を持っているもの:
SomeMethod(() => x.Something)
を何最初のブラケットを表現の意味ですか?
私はまた、あなたがに渡される引数からプロパティ名を取得することができますどのように興味が。このposssibleですか?
(コードは一例であることに注意してください)のsomeMethod(()=> x.Something)C#で意味
私は、次の構文を持っているもの:
SomeMethod(() => x.Something)
を何最初のブラケットを表現の意味ですか?
私はまた、あなたがに渡される引数からプロパティ名を取得することができますどのように興味が。このposssibleですか?
:何PARAMATERSを持っていないと同じですx.somepropertydelegate{ return x.someproperty; }
の型を返すデリゲート
式の最初の括弧は何を意味しますか?
パラメータを使用しないメソッドのラムダ構文です。それは1つのパラメータを取った場合、それはなるだろう:
SomeMethod(x => x.Something);
それは、n + 1つの引数を取った場合、それはなるだろう:
SomeMethod((x, y, ...) => x.Something);
私はまた、あなたが得ることができるどのように好奇心渡された引数のプロパティ名。これは可能ですか?
あなたSomeMethod
はい、その後、Expression<Func<T>>
を取る場合:
void SomeMethod<T>(Expression<Func<T>> e) {
MemberExpression op = (MemberExpression)e.Body;
Console.WriteLine(op.Member.Name);
}
それはlambda expressionです。つまり、無名関数や代理を作成する方法です。
一般的な形式は次のとおりです。
(input parameters) => expression
あなたは
() => expression
を持っているなら、あなたは引数を取らないと、式の結果を返す関数を作成しました。
C#はtype inferenceを使用して値のタイプを把握し、lexical closureによってローカル変数( "x"変数など)を取得します。
()
は、空の引数リストです。引数を取らずにx.Something
を返す無名関数を定義しています。
編集:それは、後者は引数を必要とし、何かをその引数で呼び出されるという点でx => x.Something
異なります。前のバージョンでは、x
は関数外のどこかに存在しなければならず、何かが呼び出されたのはx
です。後者のバージョンでは、外部xである必要はなく、存在していても、関数の引数に何かが呼び出され、他には何も呼び出されません。
()このメソッドは、パラメータを取らないことを意味します。あなたはラムダ式を使用して、通常のイベントハンドラを割り当てた場合 例えば、それは次のようになります。
someButton.Click += (s, e) => DoSomething();
をあなたはSystem.Linq.Expressions.Expression<System.Func<object>>
の型の引数を持っているのsomeMethodを必要とするプロパティの名前を取得するには。式を調べて、プロパティ名を決定することができます。
も正確にあなたの2番目の質問について議論し、代替的なアプローチを提供する次の2件のブログの記事を参照してください:
How to Find Out Variable or Parameter Name in C#?
How to Get Parameter Name and Argument Value From C# Lambda via IL?(または、「どのようにパラメータ名を取得するために、.NET LINQの式を使用しないようにすると、引数の値はC#Lambda? ")
重複:http://stackoverflow.com/questions/630330/what-does-mean-in-c/630344#630344 –
大変申し訳ありませんが重複しています。私はそれが 'SomethMethod(x => x.Something)'とどのように異なるのか不思議です –