C# 使用 String.IsNullOrEmpty 切换
Posted
技术标签:
【中文标题】C# 使用 String.IsNullOrEmpty 切换【英文标题】:C# Switch with String.IsNullOrEmpty 【发布时间】:2010-09-30 17:40:29 【问题描述】:是否可以在 C# 中使用一个开关来检查值是否为空或空,而不是“”,而是 String.Empty
?我知道我可以做到:
switch (text)
case null:
case "":
break;
有没有更好的方法,因为我不想拥有大量的 IF 语句?
我正在尝试替换:
if (String.IsNullOrEmpty(text))
blah;
else if (text = "hi")
blah
【问题讨论】:
我不知道 String.Empty 和 "" 之间有区别。有什么区别? 没有。在内容层面也是如此。参考不同。 String.Empty 总是返回相同的实例,而 "" 返回不同的实例。 我很确定两个 "" 实际上是同一个对象,因为 .net 实习生字符串,但不是肯定的。 object.ReferenceEquals 表示它们是相同的。 我的测试与 Josh 的一致 - 文字空字符串 "" 指的是与 String.Empty 相同的对象。我不确定任何标准都可以保证这一点(尽管可以保证文字的实习 - 不确定该保证是否适用于 String.Empty),但现在肯定会发生这种情况。 现在的问题是......如果它在单独的程序集中或在单独的方法/类/等中怎么办?亲身。我使用 String.Empty 因为它比 "" 更具可读性。 【参考方案1】:怎么样
if (string.isNullOrEmpty(text))
//blah
else
switch (text)
case "hi":
【讨论】:
问题是要避免 if-else 语句。 如果您查看编辑历史记录,原始问题并未包含有关 if else 的任何内容;-) 这也避免了他担心的 if 子句的样式,因为只有一个 if else 而不是 if elseif elseif 等。【参考方案2】:我建议如下:
switch(text ?? String.Empty)
case "":
break;
case "hi":
break;
这就是你要找的吗?
【讨论】:
【参考方案3】:来自String.Empty
的documentation:
这个字段的值是 零长度字符串,""。
我将此解释为""
和String.Empty
之间没有区别。你为什么要区分它们?
【讨论】:
我不确定 "" 和 String.Empty 在文化(unicode ascii 等)方面是否存在差异。【参考方案4】:您的示例 switch
语句有什么问题?
switch (text)
case null:
case "":
foo();
break;
case "hi":
bar();
break;
它有效(出于某种让我感到惊讶的原因 - 我认为它会在 null
案例中抱怨或崩溃)并且很明显。
那么,你为什么担心String.Empty
?我在这里遗漏了一些东西。
【讨论】:
【参考方案5】:一个空字符串是"",它等于String.Empty。 可以在 case 语句中放入“”而不是“String.Empty”的原因是“Empty”是“String”类的一个字段,而“”实际上是一个常量值。
在某些情况下允许使用常量值,String.Empty 是一个字段,可以在运行时更改。 (在这种情况下,它将保持不变,但并非每个类的所有静态字段都是常量值。)
在“if”的情况下,该条件在运行时进行评估,如果 not 需要一个常量值。
我希望这能解释原因。
【讨论】:
【参考方案6】:我刚刚注意到的一点是,您可以组合 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;
【讨论】:
有人在 SO 上的相关帖子中指出,这并没有真正组合语句,但 else 子句只是没有花括号,因此 switch 是唯一执行的语句。这在语法上与 Josh 的回答相同。不过我觉得挺好看的。【参考方案7】: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;
【讨论】:
【参考方案8】:有了新的c#特性,你可以使用switch expression
语法
text switch
"" or null => "a",
_ => "b"
;
【讨论】:
以上是关于C# 使用 String.IsNullOrEmpty 切换的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# GUI 调用 C# 控制台应用程序 [重复]