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

如果 DateTime 是一个对象并且默认的 C # 参数只能分配编译时常量,那么如何为诸如 DateTime 这样的对象提供默认值?

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

95917 次浏览

DateTime cannot be used as a constant but you could make it a nullable type (DateTime?) instead.

Give the DateTime? a default value of null, and if it is set to null at the start of your function, then you can initialize it to any value you want.

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


//...
}

You can call it with a named parameter like this:

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

And with the default parameter like this:

test();

The only way you can do this directly is to use the value default(DateTime), which is compile-time constant. Or you can work around that by using DateTime? and setting the default value to null.

See also this related question about TimeSpan.

Unlike VB, C# doesn't support date literals. And since optional parameters look like this in IL, you can't fake it with attributes.

.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

new DateTime() also equals DateTime.MinValue

You could a create a default parameter like so.

void test(DateTime dt = new DateTime())
{
//...
}
private System.String _Date= "01/01/1900";
public virtual System.String Date
{
get { return _Date; }
set { _Date= value; }
}

We can assign value to a label like given below,

lblDate.Text = Date;

Also we can get the value,

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

you could use:

Datetime.MinValue

for initialization.