17

是否可以在 C# 中有一个开关来检查值是 null 还是空而不是 "" 但是String.Empty?我知道我可以这样做:

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

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

我正在尝试替换:

if (String.IsNullOrEmpty(text))
    blah;
else if (text = "hi")
    blah
4

8 回答 8

31

我建议如下:

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

那是你要找的吗?

于 2009-01-11T02:13:12.127 回答
25

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

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

它有效(出于某种让我感到惊讶的原因 - 我认为它会抱怨或崩溃null)并且很清楚。

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

于 2009-01-11T03:23:25.933 回答
6

怎么样

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

}

于 2009-01-11T02:05:00.287 回答
6

从以下文档String.Empty

该字段的值是长度为零的字符串“”。

""我将此解释为和之间没有区别String.Empty。你为什么要区分它们?

于 2009-01-11T02:17:40.840 回答
4

空字符串是 "",它等于 String.Empty。您可以在 case 语句中放入“”而不是“String.Empty”的原因是“Empty”是“String”类的字段,而“”实际上是一个常量值。

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

在“if”的情况下,该条件在运行时进行评估,并且 if不需要常量值。

我希望这能解释原因。

于 2009-01-11T05:45:26.207 回答
3

我刚刚注意到的是,您可以结合 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;
}
于 2009-10-02T13:54:26.620 回答
1

借助新的 c# 功能,您可以使用switch expression语法

       text switch
       {
           "" or null => "a",
           _ => "b"
       };
于 2021-12-10T17:11:33.307 回答
0
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;
    }
}
于 2013-01-08T07:02:13.160 回答