我可以将TimeSpan用作具有默认值的可选参数吗?

时间:2017-04-13 08:16:42

标签: c# parameters default timespan c#-7.0

C#4.0的答案不再适用。 < - (抱歉,这是错误的)

如何将TimeSpan用作具有默认值的可选参数?

public static Foo(string myString, TimeSpan maxWait = TimeSpan.FromSeconds(1))
{
    // do something
}

使用此代码我收到错误:

  

默认参数必须是编译时常量

1 个答案:

答案 0 :(得分:11)

这在任何C#版本中都没有用过。默认值必须是常量。您必须创建一个重载来默认值,或者使其可为空并且如果值为null则默认值。

选项1:

public static Foo(string myString)
{
    Foo(myString, TimeSpan.FromSeconds(1));
}

public static Foo(string myString, TimeSpan maxWait)
{
    // do something
}

选项2:

public static Foo(string myString, TimeSpan? maxWait = null)
{
    TimeSpan maxWaitNotNull = maxWait ?? TimeSpan.FromSeconds(1);
    // do something
}