最近、.NET 3.5でデリゲートを使用してWriteLineを行うコードを作成していました。私はWriteLineのオーバーロードと同じシグネチャのデリゲートとの一致なし
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3)
私は、.NET 3.5を使用していたように私はquicly自分の書いた何Action<T1, T2, T3, T4, T5>
デリゲートがないですWriteLineメソッドのオーバーロードに来るまで それはすべての様々な異なるアクションデリゲートを使用してうまくいきました。
public delegate void Action<T1, T2, T3, T4, T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
私は、このメソッドAction<string, object, object, object, object> action = Console.WriteLine;
にWriteLineメソッドを割り当てるために行って、私は、エラーメッセージが表示されました
私は明示的に新しいを宣言したので、これはいくつかのジェネリック医薬品の問題の結果として引き起こされる必要があると思った「WriteLineに」マッチデリゲート「アクション<文字列、オブジェクト、オブジェクト、オブジェクト、オブジェクト>」
なしのオーバーロードデリゲート:
public delegate void WriteLineAction(string format, object arg0, object arg1, object arg2, object arg3);
私は、この新しいメソッドにWriteLineメソッドを割り当てる試み、再びエラーメッセージました:
を「WriteLineに」マッチデリゲート「WriteLineAction」
のためにも、他人の事は、私は右のエラーでありますConsole.WriteLineを呼び出しをクリックして、「定義に移動」と言う場合、それは私を取ることではありませんオーバーロードは、 正しいバージョンのWriteLineがメタデータに含まれているため、そのメソッドをデリゲートに一致させることができないのはなぜですか?私は本当にここで何か愚かなことをしていますか、これは既知の問題/機能ですか?
ない、これはあなたが達成しようとしているものですが、柔軟なログを実装しようとしている場合、あなたは[NLog](HTTPのようなライブラリに見たいと思うかもしれませんかどうかわから:リフレクターでは、として表示されます://nlog-project.org/)。それは岩: –
あなたは正しいです、これは奇妙です...WriteLineメソッドのシグネチャを新しい静的クラスにコピーしました。そのデリゲートをポイントするとうまくいきます。 – edvaldig