DateTime可选参数中的默认值应该是什么

本文关键字:默认值 是什么 参数 DateTime | 更新日期: 2023-09-27 18:11:42

通常,如果我有一个可选参数的可空类型,我会将null作为默认值。这样我就知道,如果值为空,调用者不想为该值指定任何值。

public void Foo(string text, string text2= null);

如果参数通常是正整数,我可以使用负数

public void Foo(string text, int index=-1);

DateTime呢?它不是空的,而且(据我所知)它没有一个没有意义的数字,也不能是一个真正的输入(像-1表示正整数)。或者有吗?在这种情况下你会用什么?

我也知道我可以使用nullable DateTime类型,但这意味着方法调用者将不得不使用nullable,而不是简单地传递DateTime。

DateTime可选参数中的默认值应该是什么

您可以使用c#中的?操作符使值类型可为空:

DateTime? myDate = null;

从这里,你可以使参数可选:

void Foo(DateTime? myDate = null)
{
}

关于可空类型的进一步阅读。

这不是唯一的方法,但是你可以使用default(DateTime),但是你不能在可选参数中使用DateTime.MinValue, MaxValueNow,因为它们不是编译时常量。

当然,您不需要使用可选参数,如果您希望使用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) -操作符default用于It

对于" DateTime的默认值是什么"这个问题,回答必须是:您只能使用default(DateTime)。这是因为默认值必须是const,而DateTime.MinValueDateTime.MaxValue都只能是static readonly,但请注意

default(DateTime) == DateTime.MinValue

Kind .

如果你想,你可以实现一个重载少一个参数(DateTime),并从重载调用"main"方法传递你喜欢的值。

但是正如别人写的,问题是你写错了前提。

No, DateTime(几乎所有的ValueType s。几乎所有的原因都是因为Nullable<Nullable<int>>是非法的,即使Nullable<T>ValueType) 是可空的。Nullable<DateTime>DateTime?(相同的)

即使int也是可空的,你知道吗?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);
}

default语句将一个值类型初始化为它的默认值。在日期时间的情况下,该值也作为名为datetime . minvalue的静态属性公开。如果使用c# 1.0,语句"default(DateTime)"将等同于"DateTime. minvalue "。您可以使用这个特殊值作为一种"标记"值,这意味着如果返回它,它表示无效的日期时间。

如果再次使用c# 2.0,也可以使用所谓的可空类型,并实际返回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)这样的代码甚至不必寻找特殊情况就可以工作。

同样地,最大日期也可以反过来(任何日期都在最近的合理日期之后)。

否则,只需完全避免使用默认值,而使用重载。