C#中的? 和 ??運(yùn)算符使用詳解
在 C# 中,?(null 條件運(yùn)算符)和 ??(null 合并運(yùn)算符)是兩個非常有用的運(yùn)算符,用于簡化 null 值檢查和處理。
1.?(Null 條件運(yùn)算符)
? 運(yùn)算符用于在訪問成員或元素之前檢查對象是否為 null。如果對象為 null,則返回 null 而不拋出異常。
基本用法
string name = person?.Name; // 等同于 string name = (person != null) ? person.Name : null;
鏈?zhǔn)秸{(diào)用
int? length = people?.FirstOrDefault()?.Name?.Length;
方法調(diào)用
person?.PrintName(); // 如果 person 為 null,則不執(zhí)行方法
數(shù)組/集合訪問
int? firstItem = array?[0];
2.??(Null 合并運(yùn)算符)
?? 運(yùn)算符用于在左側(cè)表達(dá)式為 null 時返回右側(cè)的值。
基本用法
string displayName = name ?? "匿名用戶"; // 等同于 string displayName = (name != null) ? name : "匿名用戶";
與?結(jié)合使用
string name = person?.Name ?? "未知";
鏈?zhǔn)绞褂?/h3>
string configValue = config?.Settings?.Value ?? "默認(rèn)值";
string configValue = config?.Settings?.Value ?? "默認(rèn)值";
3.??=(C# 8.0 引入的 Null 合并賦值運(yùn)算符)
name ??= "默認(rèn)值";
// 等同于
if (name == null)
{
name = "默認(rèn)值";
}
實際應(yīng)用示例
class Program
{
static void Main()
{
Person person = null;
// 使用 ?. 避免 NullReferenceException
string name = person?.Name;
Console.WriteLine(name); // 輸出 null
// 使用 ?? 提供默認(rèn)值
string safeName = person?.Name ?? "無名氏";
Console.WriteLine(safeName); // 輸出 "無名氏"
// 復(fù)雜示例
int? age = person?.Age ?? 18;
Console.WriteLine(age); // 輸出 18
// ??= 運(yùn)算符
string nickname = null;
nickname ??= "小新";
Console.WriteLine(nickname); // 輸出 "小新"
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
注意事項
?運(yùn)算符會改變表達(dá)式的類型,使其變?yōu)榭煽疹愋?/li>??右側(cè)的表達(dá)式只有在左側(cè)為 null 時才會計算- 這些運(yùn)算符可以大大減少代碼中的 null 檢查樣板代碼
- 在性能關(guān)鍵路徑上,
?比手動 null 檢查有輕微開銷
這兩個運(yùn)算符是現(xiàn)代 C# 編程中處理 null 值的推薦方式,可以使代碼更簡潔、更安全。
到此這篇關(guān)于C#中的? 和 ??運(yùn)算符詳解的文章就介紹到這了,更多相關(guān)C#運(yùn)算符? 和 ??內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
快速解決owin返回json字符串多帶了雙引號"多了重string轉(zhuǎn)義字符串
下面小編就為大家?guī)硪黄焖俳鉀Qowin返回json字符串多帶了雙引號"多了重string轉(zhuǎn)義字符串。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08

