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

Jan*_*kya 1 c#

正如我在我的项目中使用以下场景

String Test = String.Empty;
String Test1 = null;
String Test2 = "b";
Test = Test1 ?? Test2;
Run Code Online (Sandbox Code Playgroud)

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

但

String Test = String.Empty;
String Test1 = String.Empty;
String Test2 = "b";
Test = Test1 ?? Test2;
Run Code Online (Sandbox Code Playgroud)

此场景测试包含值""

为什么?是"Test = Test1 ?? Test2;" 这个语句只能用于空值吗?

Sim*_*ead 11

正确..这就是为什么它被称为空合并运算符.

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


Ken*_*ith 7

这是因为字符串不是null :-).它只是空洞 - 非常不同.

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

var s = "";
Debug.WriteLine(s.Length);
Run Code Online (Sandbox Code Playgroud)

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

string s = null;
Debug.WriteLine(s.Length); // <- Will throw a null reference exception
Run Code Online (Sandbox Code Playgroud)

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

Test = string.IsNullOrEmpty(Test1) ? Test2 : Test1;
Run Code Online (Sandbox Code Playgroud)