C#中的? 和 ??運(yùn)算符使用詳解
在 C# 中,?(null 條件運(yùn)算符)和 ??(null 合并運(yùn)算符)是兩個(gè)非常有用的運(yùn)算符,用于簡(jiǎn)化 null 值檢查和處理。
1.?(Null 條件運(yùn)算符)
? 運(yùn)算符用于在訪問(wèn)成員或元素之前檢查對(duì)象是否為 null。如果對(duì)象為 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ù)組/集合訪問(wèn)
int? firstItem = array?[0];
2.??(Null 合并運(yùn)算符)
?? 運(yùn)算符用于在左側(cè)表達(dá)式為 null 時(shí)返回右側(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)值";
}
實(shí)際應(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 ?? "無(wú)名氏";
Console.WriteLine(safeName); // 輸出 "無(wú)名氏"
// 復(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; }
}
注意事項(xiàng)
?運(yùn)算符會(huì)改變表達(dá)式的類(lèi)型,使其變?yōu)榭煽疹?lèi)型??右側(cè)的表達(dá)式只有在左側(cè)為 null 時(shí)才會(huì)計(jì)算- 這些運(yùn)算符可以大大減少代碼中的 null 檢查樣板代碼
- 在性能關(guān)鍵路徑上,
?比手動(dòng) null 檢查有輕微開(kāi)銷(xiāo)
這兩個(gè)運(yùn)算符是現(xiàn)代 C# 編程中處理 null 值的推薦方式,可以使代碼更簡(jiǎn)潔、更安全。
到此這篇關(guān)于C#中的? 和 ??運(yùn)算符詳解的文章就介紹到這了,更多相關(guān)C#運(yùn)算符? 和 ??內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
清除aspx頁(yè)面緩存的程序?qū)崿F(xiàn)方法
這篇文章主要介紹了清除aspx頁(yè)面緩存的程序?qū)崿F(xiàn)方法,非常實(shí)用,需要的朋友可以參考下2014-08-08
C#使用Spire.PDF for .NET實(shí)現(xiàn)PDF轉(zhuǎn)SVG
在現(xiàn)代Web開(kāi)發(fā)和圖形處理中,對(duì)于文檔和圖像格式的靈活轉(zhuǎn)換需求日益增長(zhǎng),本文將深入探討如何利用強(qiáng)大的 Spire.PDF for .NET 庫(kù),準(zhǔn)確地將PDF文件轉(zhuǎn)換為SVG文件,感興趣的小伙伴可以了解下2025-09-09

