web-dev-qa-db-ja.com

DateTimeオプションパラメータのデフォルト値は何ですか?

通常、オプションのパラメーターに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を使用する必要があることを意味します。

24
Louis Rhys

C#で_?_演算子を使用して、値型をNULL可能にできます。

_DateTime? myDate = null;_

これから、パラメーターをオプションにすることができます。

_void Foo(DateTime? myDate = null)
{
}
_

Nullable Typeの詳細情報

これは猫をスキンする唯一の方法ではありませんが、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_を使用する傾向があります。

33

default(DateTime)-演算子のデフォルトはItを対象としています

15
Vasya

「DateTimeのデフォルト値になり得るもの」という質問では、応答は次のようにする必要があります。default(DateTime)のみを使用できます。これは、デフォルト値がconstでなければならず、_DateTime.MinValue_と_DateTime.MaxValue_の両方が_static readonly_だけであるためですが、

_default(DateTime) == DateTime.MinValue
_

Kindまで。

必要に応じて、1つ少ないパラメーター(DateTime)でオーバーロードを実装し、そのオーバーロードから "main"メソッドを呼び出して、希望する値を渡します。

しかし、他の人が書いたように、問題はあなたが間違った前提を書いたことです。

いいえ、DateTime(ほぼすべてのValueTypes。_Nullable<Nullable<int>>_はValueTypeであるにもかかわらず、_Nullable<T>_は違法であるため、ほぼすべて) ヌル可能。 _Nullable<DateTime>_または_DateTime?_(同じこと)

intでもNULL値を許可します。 _int?_ :-)

7
xanatos

DateTime.MinValueがデフォルト値になります。

5
hungryMind

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);
}
4
Boomer

Nullableを使用すると、関数の呼び出し元は通常のDateTimeを渡すことができるので、気づかないでしょう:)これを行う暗黙の演算子があります

関数にデフォルトを設定する場合は、次を実行できます。

public void Foo(DateTime? value = null)
{
    if ( value == null )
    {
        value = ... // default
    } 
}
3
Wouter de Kort

コードスニペット

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;
1
Pranay Rana

DateTime.MinValueの使用を検討し、オーバーロードを使用できます。

1
Kjartan

ユースケースに依存します。

実際のデータと一致しないものはすべて機能しますが、それはあなたの使用に依存します(そのため、整数の場合は-1になります。 )。

最低日付(後のすべてのfooに関心がある)を送信している場合、最も早い賢明な日付より前の日付が実行され、.Where(f -> f.When > myDate)のようなコードはその特別なケースを探すことなく動作します。

同様に、最大日付が逆になります(最新の合理的な日付より後の日付)。

それ以外の場合は、デフォルトの使用を完全に避け、代わりにオーバーロードします。

0
Jon Hanna