C# 问号用法-NULL检查运算符?.、空合并运算符??、 可空类型修饰符?、 作者:马育民 • 2025-07-04 23:13 • 阅读:10004 # NULL检查运算符(?.) 见下面代码: ``` void test(object obj) { // obj 没有进行 `NULL` 检查,可能会报错 string s = obj.ToString(); } ``` 没有进行 `NULL` 检查,正确的版本是这样的: ``` void test(object obj) { string s = ""; if(obj != null){ s = obj.ToString(); } } ``` 正确倒是正确了,代码取变得难读多了。在C# 6.0中,引入了一个 `?.` 的运算符,前面的代码可以改成如下形式: ``` void test(object obj) { string s = obj?.ToString(); } ``` 从这个例子中我们也可以看出它的基本用法:如果对象为 `NULL`,则不进行 `.` 后面的操作,直接返回 `NULL` # 空合并运算符(??) 如果此运算符的左操作数不为 `null`,则此运算符将返回左操作数,否则返回右操作数。 例如:`a??b` 当 `a` 为 `null` 时则返回 `b`,`a`不为 `null` 时则返回a本身 ``` string test(string a,string b) { return a??b; } ``` # ?. 和 ?? 结合使用 ``` void test(object obj) { // 如果 obj为null就返回 "",否则就返回 obj.ToString() string s = obj?.ToString() ?? ""; } ``` # 可空类型修饰符(?) 引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。 例如:`int i=null;` 编译器就会报错。 为了使值类型也可为空,就可以使用 **可空类型**,即用可空类型修饰符 `?` 来表示,表现形式为 `T?` 例如: - `int?` 表示可空的整形 - `DateTime?` 表示可为空的时间 `T?` 其实是 `System.Nullable(泛型结构)` 的缩写形式, 例如:`int?` 编译后是 `System.Nullable` 参考: https://www.cnblogs.com/youmingkuang/p/11459615.html 原文出处:http://malaoshi.top/show_1GW1QmFhVkCX.html