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

本文关键字:null 为什么 空白 不接受 意味着 两个 加在一起 | 更新日期: 2023-09-27 18:01:09

由于我在项目中使用以下场景

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;

本方案测试conatins值">

为什么?"Test=Test1??Test2;"这句话只适用于空值吗?

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

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

空字符串不为null。。因此不能满足操作者的要求。

这是因为字符串不是null:-(。它只是空的——非常不同。

例如,对于一个空字符串,您可以调用该字符串上的方法,例如:

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;

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

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

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

Test1 ?? Test2;

只是写的一种简单方法

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

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