C#4.0 - 如何处理可选的字符串参数

RPM*_*984 16 .net c# string optional-parameters c#-4.0

此代码无效:

private void Foo(string optionalString = string.Empty)
{
   // do foo.
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码是:

private void Foo(string optionalString = "")
{
   // do foo.
}
Run Code Online (Sandbox Code Playgroud)

为什么?因为string.Empty是只读字段,而不是常量,并且可选参数的缺省值必须是编译时常量.

那么,关于我的问题......(好吧,关心)

这就是我必须做的事情:

private const string emptyString = "";

private void Foo(string optionalString = emptyString)
{
   // do foo.
   if (!string.IsNullOrEmpty(optionalString))
      // etc
}
Run Code Online (Sandbox Code Playgroud)

你们如何处理可选的字符串参数?

为什么它们不能使String.Empty成为编译时常量?

Ed *_* S. 11

嗯...字符串optionalParm =""又出了什么问题?为什么那么糟糕?在这种情况下,你真的认为你需要一个空字符串的符号常量吗?那怎么样?

const int Zero = 0;

void SomeMethod(int optional = Zero) { }
Run Code Online (Sandbox Code Playgroud)

这对你来说真的很傻吗?

  • 为什么这么粗鲁的回应?OP有一个合理的问题. (7认同)
  • 同意,我的名字很糟糕.我已经习惯了将string.empty用于大多数字符串操作,当我开始使用Optional Params时,我不喜欢我必须回到""的事实.猜猜不好用"". (2认同)

Dan*_*nil 5

如果您不喜欢“”值,则可以使用default(string)。
我玩过它,它被允许。

private static void foo(string param = default(string)) {
    if (!string.IsNullOrEmpty(param)) // or param != default(string)
        Console.WriteLine(param);
}
Run Code Online (Sandbox Code Playgroud)

  • 默认(字符串)值为null,而不是空字符串。 (6认同)

小智 5

代码分析警告 1026表示不要使用可选参数。使用重载方法是更好的风格,如下所示:

private void Foo()
{
   Foo(string.Empty);
}
private void Foo(string optionalString)
{
   // do foo.
   if (!string.IsNullOrEmpty(optionalString))
      // etc
}
Run Code Online (Sandbox Code Playgroud)