是什么区别const,并readonly和你使用一个比其他?
我想说:
public void Problem(Guid optional = Guid.Empty)
{
}
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨Guid.Empty不是编译时常量.
由于我不想更改API,我无法使用:
Nullable<Guid>
Run Code Online (Sandbox Code Playgroud) 这两个都会产生错误,说它们必须是编译时常量:
void Foo(TimeSpan span = TimeSpan.FromSeconds(2.0))
void Foo(TimeSpan span = new TimeSpan(2000))
Run Code Online (Sandbox Code Playgroud)
首先,有人可以解释为什么在编译时无法确定这些值吗?有没有办法为可选的TimeSpan对象指定默认值?
我有两个重载方法,一个带有可选参数.
void foo(string a) { }
void foo(string a, int b = 0) { }
Run Code Online (Sandbox Code Playgroud)
现在我打电话给:
foo("abc");
Run Code Online (Sandbox Code Playgroud)
有趣的是第一次重载被调用.为什么第二次重载的可选值设置为零?
说实话,我希望编译器带来一个错误,至少是一个警告,以避免无意中执行错误的方法.
这种行为的原因是什么?为什么C#团队以这种方式定义它?
c# ×3
c#-4.0 ×3
.net ×1
const ×1
constants ×1
overloading ×1
parameters ×1
readonly ×1
timespan ×1