两个问号一起意味着在C#接受只有null而不是空白为什么?

时间:2014-05-02 04:46:14

标签: c#

因为我在项目中使用了以下场景

String Test = String.Empty;
String Test1 = null;
String Test2 = "b";
Test = Test1 ?? Test2;

在此场景测试中包含值" b"

但是

String Test = String.Empty;
String Test1 = String.Empty;
String Test2 = "b";
Test = Test1 ?? Test2;

此场景测试包含值""

为什么呢?是"测试=测试1? TEST2;"这个语句只能用于空值吗?

4 个答案:

答案 0 :(得分:11)

正确..这就是为什么它被称为null coalescing operator

空字符串不为空..因此它不符合运算符的要求。

答案 1 :(得分:7)

因为字符串不是空的:-)。它只是空洞 - 非常不同。

例如,使用空字符串,您可以在字符串上调用方法,如下所示:

var s = "";
Debug.WriteLine(s.Length);

你不能用一个字符串变量来做到这一点:

string s = null;
Debug.WriteLine(s.Length); // <- Will throw a null reference exception

要获得所需的结果,您需要执行以下操作:

Test = string.IsNullOrEmpty(Test1) ? Test2 : Test1;

答案 2 :(得分:3)

如果只需要检查空值和空/空格,可以使用条件运算符,例如

Test = string.IsNullOrWhiteSpace(Test1)
 ? Test2
 : Test1;

答案 3 :(得分:1)

您已经获得了所需的所有答案,但我想在null合并运算符上进行一些扩展。保存一些代码只是简单的,一些语法糖(就像? :条件运算符是短手的一样。

Test1 ?? Test2;

只是一种简短的写作方式

if (Test1 == null) { Test1 = Test2 }

......正如其他人所说,null != string.Empty。如果你想测试string.Empty那么你就不能使用这个特殊的简写。你必须用长手写出来,或者使用? :捷径。