これは私のメソッドシグネチャです。 end
をオプションのパラメーターとして渡そうとすると、このエラーが発生します。これを解決するにはどうすればよいですか?なぜDateTime.MinValue
定数?
public static void DatesToPeriodConverter(DateTime start, DateTime end = DateTime.MinValue,
out string date, out string time)
DateTime.MinValue
はconst
ではありません。言語がconst
のDateTime
を好まないためです。 1つのオプションは、代わりにDateTime?
を使用することです。
public static void DatesToPeriodConverter(DateTime start, DateTime? end = null,
out string date, out string time)
{
var effectiveEnd = end ?? DateTime.MinValue;
// ...
}
ただし、デフォルト以外のパラメータafter default parametersの問題は引き続き発生します。デフォルトとして使用するためには、それらを並べ替える必要がある場合があります。
代わりに通常のメソッドオーバーロードを使用します。
_public static void DatesToPeriodConverter(DateTime start, out string date, out string time)
{
DatesToPeriodConverter(start, DateTime.MinValue, out date, out time);
}
public static void DatesToPeriodConverter(DateTime start, DateTime end, out string date, out string time)
{ }
_
寛容に、default(DateTime)
は_DateTime.MinValue
_と同じであり、コンパイル時定数ですが、このスタイルを使用することを間違える傾向があります(将来的にdefault(DateTime)
が等しくなるという保証はありません_DateTime.MinValue
_):
_public static void DatesToPeriodConverter(DateTime start, DateTime end = default(DateTime), out string date, out string time)
_
または、Marcが示唆しているように、null
のデフォルト値を許可する_DateTime?
_を使用します。
この方法で試してみることができます:
public static void DatesToPeriodConverter(DateTime start, DateTime? end , out string date, out string time)
{
if(!end.HasValue){
end = DateTime.MinValue;
}
}
パラメーターの終わりのタイプをNullableに変更し、デフォルト値としてnullを使用します。
public static void DatesToPeriodConverter(DateTime start, DateTime? end = null, out string date, out string time)
または、デフォルト値としてdefault(DateTime)を使用します。
public static void DatesToPeriodConverter(DateTime start, DateTime end = default(DateTime), out string date, out string time)
あなたは正しいです。値のデフォルトのパラメーターはコンパイル時定数でなければなりません。コンパイラーは、オプションのパラメーターに対して動的に計算された値を受け入れません。この背後にある理由は、あなたが提供している動的な値が何らかの有効な値を与えるかどうかが明確ではないためかもしれません。
オプションのパラメーターは、パラメーターリストの最後に表示する必要があります。 outパラメーターは、パラメーターリストの最後にも表示する必要があります。オプションのパラメーターはoutパラメーターではありません。
さらに、リテラル定数といくつかの奇妙なコーナーケース以外のオプションのパラメーターにデフォルト値を使用することはできません。
すべての事実は、次の方向を指します。