2016-06-27 19 views
1

NLogライブラリからSwallow(Func)メソッドを使用する必要があります。 重要な注意:静的メソッドからSwallowを呼び出し、静的メソッドを渡したいとします。C#の関数パラメータとしてSTATICメソッドへの参照を渡すには?

そのドキュメントはここにある:

http://nlog-project.org/documentation/v3.2.1/html/Overload_NLog_Logger_Swallow.htm

最初のケース(Swallow(Action))(パラメータの静的メソッドをWO渡し)は簡単に動作します:

static void ParameterlessMethodThatCasts() 
{ 
    throw NotImplementedException("Not implemented yet"); 
} 

... 
// Code in some method that uses static instance of nLog 
nLog.Instance.Swallow(ParameterlessMethodThatCasts); 

は残念ながら、ために提供例はありません2番目のケース(Swallow<T>(Func<T>))と3番目のケース(Swallow<T>(Func<T>, T))です。両方のケースがパラメータ付きのメソッド参照に渡されます。

他にも適切な例はありませんでした。

私は自分自身を試してみました:それらのどちらも

`Object.TypeOf()` 

var t = typeof(MyMethod);

は構文的に正しいです。

代わりに、パラメータ (つまり、上記のリンクの2番目と3番目のオーバーロード)のメソッドに参照を渡すには、どのような構文を使用する必要がありますか?

デリゲートを渡す以外の方法はありますか?

+0

私はデリゲートを作成する必要がありますすることができ、このスレッドで提案されているように、パスしてください: http://stackoverflow.com/questions/2082615/pass-method-as-parameter-using-c-sharp?rq=1 –

答えて

1

必要になります場合は、Func<T>またはFunc<T, T>に渡すことができますが、匿名ラムダ式に渡すために多分それはより適しています。

() => this.ParameterlessMethodThatCasts("A", "B", 1, 2) 

このシグネチャは、最初の過負荷にマッチしたので、あなたが渡すことができますあなたが望む任意のパラメータで。

private string SomeMethod(); // Func<T> 

そして、この:

Func<T>Func<T, T>は、このような方法を(どこTが、この場合にstringある)一致します

private string SomeMethod(string arg1); // Func<T, T> 
+0

Patrick:Thanx for tip。私は指定するのを忘れていました、私はそれを行う静的メソッド環境でした。私は質問でそれを修正しました。 –

+0

それで私の答えはどう変わるのですか? –

+0

Patrick あなたは正しいです!私はタイプ指定Swallow を削除し、今コンパイルします。正確に私が欲しいもののように見えます:)私にチェックさせてください。 –

関連する問題