C# 4.0:我可以使用 TimeSpan 作为具有默认值的可选参数吗?

2023-12-11

这两个都会生成一个错误,指出它们必须是编译时常量:

void Foo(TimeSpan span = TimeSpan.FromSeconds(2.0))
void Foo(TimeSpan span = new TimeSpan(2000))

首先,有人可以解释为什么这些值不能在编译时确定吗?有没有办法为可选的 TimeSpan 对象指定默认值?


您可以通过更改签名来轻松解决此问题。

void Foo(TimeSpan? span = null) {

   if (span == null) { span = TimeSpan.FromSeconds(2); }

   ...

}

我应该详细说明 - 您的示例中的这些表达式不是编译时常量的原因是因为在编译时,编译器不能简单地执行 TimeSpan.FromSeconds(2.0) 并将结果的字节粘贴到编译后的代码中。

例如,考虑一下您是否尝试改用 DateTime.Now。 DateTime.Now 的值每次执行时都会发生变化。或者假设 TimeSpan.FromSeconds 考虑了重力。这是一个荒谬的例子,但编译时常量的规则不会仅仅因为我们碰巧知道 TimeSpan.FromSeconds 是确定性的而产生特殊情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 4.0:我可以使用 TimeSpan 作为具有默认值的可选参数吗? 的相关文章

随机推荐