是否可以在 C# 中有一个开关来检查值是 null 还是空而不是 "" 但是String.Empty
?我知道我可以这样做:
switch (text)
{
case null:
case "":
break;
}
有没有更好的东西,因为我不想有大量的 IF 语句?
我正在尝试替换:
if (String.IsNullOrEmpty(text))
blah;
else if (text = "hi")
blah
是否可以在 C# 中有一个开关来检查值是 null 还是空而不是 "" 但是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。您可以在 case 语句中放入“”而不是“String.Empty”的原因是“Empty”是“String”类的字段,而“”实际上是一个常量值。
在某些情况下允许使用常量值,String.Empty 是一个字段,可以在运行时更改。(在这种情况下,它将保持不变,但并非每个类的所有静态字段都是常量值。)
在“if”的情况下,该条件在运行时进行评估,并且 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;
}
借助新的 c# 功能,您可以使用switch expression
语法
text switch
{
"" or null => "a",
_ => "b"
};
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;
}
}