Mad*_*Boy 18 c# optional-parameters
我正在编写一种方法,它将DateTime值作为其中一个参数.我决定它是可选参数,所以我继续尝试DateTime.MinValue默认.
private void test(string something, DateTime testVar = DateTime.MinValue) {
}
Run Code Online (Sandbox Code Playgroud)
但是这会产生一个错误:
'testVar'的默认参数值必须是编译时常量.
使用此代码似乎工作得很好.
private void test(string something, DateTime testVar = new DateTime()) {
}
Run Code Online (Sandbox Code Playgroud)
我得到了建议,使用DateTime.MinValue而不是新的DateTime(),因为它是自我记录的.既然new DateTime()是基本相同的东西为什么DateTime.MinValue不能用?如果我把它留下来也会有任何潜在的问题new DateTime()吗?
Yuc*_*uck 12
DateTime.MinValue 定义为:
public static readonly DateTime MinValue
Run Code Online (Sandbox Code Playgroud)
哪个不一样const.由于readonly值不是编译时常量(即在编译时不评估该值),因此无法使用它.
使用new DateTime()作品的原因是因为该表达式在编译时是已知的.这和写作一样default(DateTime).例如,result == true在以下表达式中:
var result = new DateTime() == default(DateTime);
Run Code Online (Sandbox Code Playgroud)
其他答案触及了为什么不能使用DateTime.MinValue,它不是合法的编译时常量.它是一个static readonly字段,就使用情况而言可能很好,但不是合法的,也不符合可用作默认参数的规则.至于new DateTime() 可以使用的原因,请参阅C#4.0语言规范的第10.6.1节.相关位:
default-argument中的表达式必须是以下之一:
·一个常量表达式
· new S()形式的表达式,其中S是值类型
· 形式为default(S)的表达式,其中S是值类型
这导致零初始化实例,基本上是全零的位模式.(见:第4.1.2节)
但是,在这种情况下,我仍然建议使用a DateTime? value = null作为参数和默认参数,特别是当它表示数据库中可以为空的日期时.MinValue不是没有价值.null是.
| 归档时间: |
|
| 查看次数: |
5738 次 |
| 最近记录: |