是否可以在C#中进行切换,检查该值是空还是空而不是“”。但 String.Empty ?我知道我可以这样做:

switch (text)
{
    case null:
    case "":
        break;
}

有没有更好的东西,因为我不想拥有大量的IF语句?

我试图替换:

if (String.IsNullOrEmpty(text))
    blah;
else if (text = "hi")
    blah
有帮助吗?

解决方案

我建议如下:

switch(text ?? String.Empty)
{
    case "":
        break;
    case "hi":
        break;
}

这就是你要找的东西吗?

其他提示

您的示例 switch 语句出了什么问题?

switch (text)
{
    case null:
    case "":
        foo();
        break;
    case "hi":
        bar();
        break;
}

它有效(并且由于某些原因让我感到惊讶 - 我认为它会在 null 情况下抱怨或崩溃)而且很明显。

就此而言,你为什么担心 String.Empty ?我在这里错过了一些东西。

怎么样

if (string.isNullOrEmpty(text))
{
   //blah
}
else
{
 switch (text)
 {
     case "hi":
 }

}

来自文档 String.Empty

  

此字段的值为   零长度字符串,“"。

我将此解释为意味着"" String.Empty 之间没有区别。你为什么试图区分它们?

空字符串是“"”,它等于String.Empty。你可以放“&”的原因在case语句中但不是“String.Empty”就是那个“空”的是“String”类的字段。和“”实际上是一个有价值的东西。

在案例中允许使用常量值,String.Empty是一个字段,可以在运行时更改。 (在这种情况下,它将保持不变,但并非每个类的所有静态字段都是常量值。)

在'if'的情况下,在运行时评估该条件,并且是否需要常量值。

我希望这能解释原因。

我刚注意到的一点是你可以结合if / else和switch语句!在需要检查前置条件时非常有用。

if (string.IsNullOrEmpty(text))
{
    //blah
}
else switch (text)
{
    case "hi":
        Console.WriteLine("How about a nice game of chess?");
        break;
    default:
        break;
}
string StrMode;
if (!string.IsNullOrEmpty(StrMode))
{  
    switch (StrMode.Trim())
    {
        case "Souse":
        {
             //Statement Eg:  
             MesssageBox.Show("Souse");
             break;
        }

        case "Company Agent":
        {
             //Statement Eg:
             MesssageBox.Show("Souse");
             break; 
        }

        default:
             return;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top