Jon Skeetの回答で、この興味深い行 here を読みました。
興味深いのはこれで、彼はデリゲートを使用することを提唱しました:
Log.Info("I did something: {0}", () => action.GenerateDescription());
質問ですが、これは()=>演算子とは何でしょうか?私はそれをグーグルで試しましたが、それはシンボルでできているので、グーグルは実際にはあまり役に立ちませんでした。恥ずかしいことにここで何かを見逃しましたか?
これにより、パラメーターのないラムダ関数(匿名デリゲート)が導入されます。これは、以下と同等で基本的には省略形です。
delegate void () { return action.GenerateDescription(); }
パラメータを追加することもできます。
(a, b) => a + b
これはおおよそ次と同等です。
delegate int (int a, int b) { return a + b; }
=>
これはラムダ演算子です。入力パラメーターがない場合は、ラムダ演算子の前に角かっこ()
を使用します。
構文:(input parameters) => expression
これは、詳細を学習できるラムダ式の例です here 。
指定されたメソッドに匿名デリゲートを作成します。
おそらく、あなたの場合はFunc<string>
ラムダ式としてパラメーターなしで匿名デリゲートを渡す方法です。
.NET 2.0のこれと同様
Log.Info("I did something: {0}", delegate()
{
return action.GenerateDescription();
});