2016-04-22 1 views
1

読書this記事は、私がオブジェクトにパラメータを渡すための1つの奇妙な方法を見つけましたか?これはパラメータを渡す適切な方法ですか?</p> <pre><code>_saveProductCommand = new RelayCommand( param => SaveProduct(), param => (CurrentProduct != null) </code></pre> <p>がこのタイプミスやパラメータを渡すための適切な方法は、次のとおりです。

+0

これはこのように渡されるリレーコマンドです –

+1

パラメータが代理人または式であれば、lambdaを渡すことができます。 – juharr

+2

参照:https://msdn.microsoft.com/en-us/library/bb397687.aspx –

答えて

2

一般的なプロパティに適用されるものではありません。たとえば、パラメータが文字列の場合は、name => statement構文を使用できません。

RelayCommandの定義を見ると、パラメータのタイプがActionであることがわかります。これは、コードまたはメソッドのブロックをオブジェクトとして渡すことを可能にする特別なタイプです。これらは一般的にDelegatesと呼ばれます。

あなたが参照している構文はLambdaと呼ばれ、いくつかの形式があります。

最も簡単なのは() => doSomething()です。この場合、ラムダはパラメータを取らず、doSomethingメソッドのみを呼び出します。

次はこのコードでパラメータparam => doSomething(param)を受け取るラムダです。変数paramはラムダのコード本体のローカル変数であり、ラムダを実行するコードは何かを渡す必要がありますここにはもっと完全な例があります。

var myLambda = param => doSomething(param); 
myLambda("some string value"); 

したがって、この例では文字列がdoSomethingメソッドに渡されます。

これらの例では、Actionクラスに変換されるラムダのみをカバーしていますが、Funcとなるラムダを書くこともできます。 Predicateという別の形式もあります。これは基本的にtrueまたはfalseを返すアクションです。

ActionクラスのFuncクラスとPredicateクラスの追加読書をお勧めします。

関連する問題

 関連する問題