如果DateTime是一个对象且默认的C#参数只能被编译时常量所赋值,那么如何为像DateTime这样的对象提供默认值?
我正在尝试使用带有默认值的命名参数,通过构造函数来初始化POCO中的值。
如果DateTime是一个对象且默认的C#参数只能被编译时常量所赋值,那么如何为像DateTime这样的对象提供默认值?
我正在尝试使用带有默认值的命名参数,通过构造函数来初始化POCO中的值。
DateTime
不能用作常量,但你可以将其变为可空类型 (DateTime?
)。
将 DateTime?
设置为默认值 null
,如果在函数开始时它被设置为 null
,那么你可以将它初始化为任何值。
static void test(DateTime? dt = null)
{
if (dt == null)
{
dt = new DateTime(1981, 03, 01);
}
//...
}
你可以像这样使用命名参数进行调用:test(dt: new DateTime(2010, 03, 01));
并且使用默认参数,就像这样:
test();
DateTime dt = default(DateTime)
。 - Sebastian唯一可以直接这样做的方法是使用编译时常量值 default(DateTime)
。或者你可以通过使用 DateTime?
并将默认值设置为 null
来解决这个问题。
关于 TimeSpan
的可选参数和默认值,也可以参考这个相关问题。
new DateTime()也等同于DateTime.MinValue。
你可以这样创建一个默认参数。
void test(DateTime dt = new DateTime())
{
//...
}
C#不支持日期字面量,与VB不同。而且由于可选参数在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
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);
你可以使用:
Datetime.MinValue
用于初始化。