通常、オプションのパラメーターにnull値を許可する型がある場合、nullをデフォルト値として設定します。このように、値がnullの場合、呼び出し側はその値を指定したくないことを知っています。
public void Foo(string text, string text2= null);
パラメータが通常正の整数である場合、負の数を使用できます
public void Foo(string text, int index=-1);
DateTimeはどうですか?それはnull可能ではなく、(私が知る限り)、真の入力にもなり得ない無意味な数字もありません(正の整数の-1など)。それともありますか?この状況で何を使用しますか?
また、nullable DateTime
型を使用できることも知っていますが、これはメソッド呼び出し元がNullableを使用する必要があることを意味します。
C#で_?
_演算子を使用して、値型をNULL可能にできます。
_DateTime? myDate = null;
_
これから、パラメーターをオプションにすることができます。
_void Foo(DateTime? myDate = null)
{
}
_
これは猫をスキンする唯一の方法ではありませんが、default(DateTime)
を使用できますが、cannot_DateTime.MinValue
_を使用できます、MaxValue
、またはオプションパラメーターのNow
は、コンパイル時定数ではないためです。
もちろん、オプションのパラメーターを使用する必要はありません。Min、Max、またはNowを使用する場合は、オーバーロードされたメソッドを使用できます。
_void Foo()
{
Foo(DateTime.MinValue);
}
void Foo(DateTime d)
{
}
_
やりすぎにしたい場合(まあ、やりすぎではないかもしれませんが、これを行うための正当な理由がたくさんあります)、値がいつあるかを理解する新しい日付型を定義できます。
_class SmarterDateTime
{
public bool IsSet { get; set; }
// Wrapper around DateTime etc excluded.
}
_
デフォルトにする必要があるものについては、必要に応じて任意の日付をデフォルトにすることを選択できますが、オプションのパラメータなどは制限。
個人的には、_DateTime.MinValue
_を使用する傾向があります。
default(DateTime)-演算子のデフォルトはItを対象としています
「DateTimeのデフォルト値になり得るもの」という質問では、応答は次のようにする必要があります。default(DateTime)
のみを使用できます。これは、デフォルト値がconst
でなければならず、_DateTime.MinValue
_と_DateTime.MaxValue
_の両方が_static readonly
_だけであるためですが、
_default(DateTime) == DateTime.MinValue
_
Kind
まで。
必要に応じて、1つ少ないパラメーター(DateTime
)でオーバーロードを実装し、そのオーバーロードから "main"メソッドを呼び出して、希望する値を渡します。
しかし、他の人が書いたように、問題はあなたが間違った前提を書いたことです。
いいえ、DateTime(ほぼすべてのValueType
s。_Nullable<Nullable<int>>
_はValueType
であるにもかかわらず、_Nullable<T>
_は違法であるため、ほぼすべて) ヌル可能。 _Nullable<DateTime>
_または_DateTime?
_(同じこと)
int
でもNULL値を許可します。 _int?
_ :-)
DateTime.MinValue
がデフォルト値になります。
dateTimeのデフォルトパラメータを確認し、その値は1/1/0001 12:00:00 AM
、
private void M(Int32 x = 9, String s = “A”, DateTimedt = default(DateTime), Guidguid = new Guid()) {
Console.WriteLine(“x={0}, s={1}, dt={2}, guid={3}”, x, s, dt, guid);
}
Nullableを使用すると、関数の呼び出し元は通常のDateTimeを渡すことができるので、気づかないでしょう:)これを行う暗黙の演算子があります
関数にデフォルトを設定する場合は、次を実行できます。
public void Foo(DateTime? value = null)
{
if ( value == null )
{
value = ... // default
}
}
コードスニペット
public DateTime method1()
{
if (condition)
return new DateTime(2007, 5, 30, 11, 32, 00);
else
return default(DateTime);
}
デフォルトステートメントは、値タイプをデフォルト値に初期化します。日時の場合、この値はDateTime.MinValueという静的プロパティとしても公開されます。 C#1.0を使用する場合、ステートメント「default(DateTime)」は「DateTime.MinValue」と同等になります。この特別な値を一種の「マーカー」値として使用できます。つまり、返される場合は無効な日時を示しています。
C#2.0を再度使用する場合、次の例に示すように、null許容型と呼ばれるものを使用し、実際にNULLを返すこともできます。
コードスニペット
public DateTime? method2()
{
if (condition)
return new DateTime(2007, 5, 30, 11, 32, 00);
else
return null;
}
// This is the best way to null out the DateTime.
//
DateTime dateTime2 = DateTime.MinValue;
値DateTime.MinValue
の使用を検討し、オーバーロードを使用できます。
ユースケースに依存します。
実際のデータと一致しないものはすべて機能しますが、それはあなたの使用に依存します(そのため、整数の場合は-1になります。 )。
最低日付(後のすべてのfooに関心がある)を送信している場合、最も早い賢明な日付より前の日付が実行され、.Where(f -> f.When > myDate)
のようなコードはその特別なケースを探すことなく動作します。
同様に、最大日付が逆になります(最新の合理的な日付より後の日付)。
それ以外の場合は、デフォルトの使用を完全に避け、代わりにオーバーロードします。