2

私はこの方法を持っています

public static void WriteErrorLog(LogEntry logEntry, string method, [Optional, DefaultParameterValue(0)]  int? errorTypeID)

だから私は次のようなメソッドを呼び出すことができると期待しています

WriteErrorLog(l, "text");

しかし、とにかくVisualStudioのエラーが発生します:(

メソッド'WriteErrorLog'のオーバーロードはありません2つの引数を取ります

私が欠けているものは何ですか?

ありがとうございました!

4

5 に答える 5

16

を使用することは想定されていません[Optional, DefaultParameterValue(0)]。代わりに、cスタイルのデフォルトパラメータ構文を使用する必要があります。

public static void WriteErrorLog(LogEntry logEntry, string method, int? errorTypeID = 0)

また、errorTypeIdがの場合Nullable、デフォルト値はnull

public static void WriteErrorLog(LogEntry logEntry, string method, int? errorTypeID = null)
于 2012-06-07T14:34:23.977 に答える
6

問題は、[Optional]それがオプションにする方法ではないということです。試す:

public static void WriteErrorLog(LogEntry logEntry, string method, [Optional, DefaultParameterValue(0)]  int? errorTypeID = null)

オプションのパラメーターはC#4.0で追加され、メソッドのオーバーロードの簡単な代替手段です。内部的には、指定したデフォルト値を含む呼び出しを呼び出す場所で拡張されます。[Optional]属性はそのままにしておくことができます。まったく痛くありません。実際、それが何かをするかどうかはわかりません。別のオーバーロードがデフォルトを処理したために省略できるものをマークすることで、オーバーロードを使いやすくすることだと推測しなければなりませんでした。

于 2012-06-07T14:34:16.003 に答える
3

オプションのパラメータを次のように記述する必要があります。

public static void WriteErrorLog(LogEntry logEntry, 
    string method, int? errorTypeID = 0)

これは正しくコンパイルされます。

于 2012-06-07T14:36:51.440 に答える
0

.NET 4 (またはそれ以降) を使用している場合:

public static void WriteErrorLog(LogEntry logEntry, string method, int? errorTypeID = null)

null 許容型の「デフォルト」値は であることに注意してくださいnull。C では、通常、整数のデフォルト値として -1 または 0 を使用します。これは、C# で nullable を使用してよりクリーンに実行できることです。私の知る限り、Haskellや他の言語にも似たようなものがあります。

于 2012-06-07T14:40:33.450 に答える
0

なぜそれがうまくいかないのかわかりません。メソッドのパラメーターを、入力したとおりにコピーしました。VS2010 と .NET 4.0 を使用しています。コードを実行しましたが、毎回問題なく動作します。

とにかく、C スタイルのデフォルト パラメータを使用する必要があります。しかし、この方法はまだ私にとってはうまくいきます。ただし、赤い下線が表示され、ホバリングすると同じエラーが表示されます。しかし、コードを実行すると、すべてが正常に機能します。

于 2012-06-07T14:44:31.597 に答える