C#4默认参数值:如何分配默认的DateTime /对象值?

时间:2010-05-24 03:11:19

标签: c# default-parameters

如果DateTime是一个对象,并且默认的C#参数只能被赋予编译时常量,那么如何为DateTime等对象提供默认值?

我正在尝试使用构造函数初始化POCO中的值,使用带有默认值的命名参数。

6 个答案:

答案 0 :(得分:181)

DateTime不能用作常量,但您可以将其设为可以为空的类型(DateTime?)。

DateTime?设为默认值null,如果在功能开始时将其设置为null,则可以将其初始化为您想要的任何值。< / p>

static void test(DateTime? dt = null)
{
    if (dt == null)
    {
        dt = new DateTime(1981, 03, 01);
    }

    //...
}

您可以使用如下命名参数调用它:

test(dt: new DateTime(2010, 03, 01));

使用默认参数:

test();

答案 1 :(得分:60)

直接执行此操作的唯一方法是使用值default(DateTime),这是编译时常量。或者,您可以使用DateTime?并将默认值设置为null来解决此问题。

另见this related question about TimeSpan

答案 2 :(得分:8)

new DateTime()也等于DateTime.MinValue

你可以像这样创建一个默认参数。

void test(DateTime dt = new DateTime())
{
//...
}

答案 3 :(得分:4)

与VB不同,C#不支持日期文字。由于可选参数在IL中看起来像这样,因此您无法使用属性伪装它。

.method private hidebysig static void foo([opt] int32 x) cil managed
{
    .param [1] = int32(5)
    .maxstack 8
    L_0000: nop 
    L_0001: ret 
}



.method //this is a new method
private hidebysig static //it is private, ???, and static
void foo  //it returns nothing (void) and is named Foo
([opt] int32 x) //it has one parameter, which is optional, of type int32

.param [1] = int32(5) //give the first param a default value of 5

答案 4 :(得分:-1)

private System.String _Date= "01/01/1900";
public virtual System.String Date
{
   get { return _Date; }
   set { _Date= value; }
}

我们可以为下面给出的标签赋值

lblDate.Text = Date;

我们也可以获得价值

DateTime dt = Convert.ToDateTime(label1.Text);

答案 5 :(得分:-2)

你可以使用:

Datetime.MinValue

用于初始化。