这两个都会产生错误,说它们必须是编译时常量:
void Foo(TimeSpan span = TimeSpan.FromSeconds(2.0))
void Foo(TimeSpan span = new TimeSpan(2000))
Run Code Online (Sandbox Code Playgroud)
首先,有人可以解释为什么在编译时无法确定这些值吗?有没有办法为可选的TimeSpan对象指定默认值?
这是我的方法:
public void SomeQuery(string email = "", Guid userId = Guid.Empty)
{
// do some query
}
Run Code Online (Sandbox Code Playgroud)
userId给我一个错误,因为它必须是一个编译时常量,我明白.但即使我宣布一个const:
private const emptyGuid = Guid.Empty;
Run Code Online (Sandbox Code Playgroud)
然后将方法签名更改为:
public void SomeQuery(string email = "", Guid userId = emptyGuid)
{
// do some query
}
Run Code Online (Sandbox Code Playgroud)
仍然没有爱.
我错过了什么?
我想说:
public void Problem(DateTime optional = DateTime.MaxValue)
{
}
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨DateTime.MaxValue不是编译时常量.
DateTime.MinValue很简单,只需使用默认值(DateTime)
另请参阅" 如何在C#中将参数默认为Guid.Empty? "
我不想使用方法重载,因为我试图驯服的方法有101个参数!