C# ?的使用小結(jié)
可空類型標(biāo)記符(?)
說明:
- 可空類型標(biāo)記符
?用于指示某個值類型(如int、float等)可以為null。這是C# 2.0引入的一個特性,用于處理數(shù)據(jù)庫查詢、JSON解析等場景中可能出現(xiàn)的空值。
示例代碼:
int? nullableInt = 5;
int? nullableIntWithNull = null;
if (nullableInt.HasValue)
{
Console.WriteLine(nullableInt.Value); // 輸出: 5
}
if (!nullableIntWithNull.HasValue)
{
Console.WriteLine("The value is null."); // 輸出: The value is null.
}
空值傳播操作符(?.)
說明:
- 空值傳播操作符
?.用于在訪問可能為null的對象的成員之前進(jìn)行空檢查。如果對象為null,則不會嘗試訪問其成員,而是直接返回null。
示例代碼:
string str = null;
int? length = str?.Length; // length 為 null,因?yàn)?str 為 null
Person person = null;
string jobTitle = person?.JobTitle; // jobTitle 為 null,因?yàn)?person 為 null
person = new Person { JobTitle = "Software Engineer" };
jobTitle = person?.JobTitle; // jobTitle 為 "Software Engineer"
條件(三元)運(yùn)算符(?:)
說明:
- 條件運(yùn)算符
?:是C#中的三元運(yùn)算符,用于根據(jù)條件選擇兩個值之一。其語法為condition ? expression1 : expression2。
示例代碼:
int x = 10;
int y = 5;
int max = x > y ? x : y; // max 為 10
Console.WriteLine("最大值: " + max);
空值合并操作符(??)
說明:
- 空值合并操作符
??用于在第一個操作數(shù)為null時返回第二個操作數(shù)的值,否則返回第一個操作數(shù)的值。這常用于提供默認(rèn)值以避免null引發(fā)的異常。
示例代碼:
string name = null; string displayName = name ?? "匿名用戶"; // displayName 為 "匿名用戶" string username = "DeveloperDave"; displayName = username ?? "Newbie"; // displayName 為 "DeveloperDave",因?yàn)?username 不為 null Console.WriteLine(displayName);
空值合并賦值運(yùn)算符(??=)
說明:
- 空值合并賦值運(yùn)算符
??=是C# 8.0及更高版本中引入的一個特性,它結(jié)合了空值合并運(yùn)算符(??)和賦值運(yùn)算符(=)的功能。這個運(yùn)算符用于將右側(cè)的值賦給左側(cè)的變量,但僅當(dāng)左側(cè)的變量為null時。如果左側(cè)的變量不為null,則不會更改其值。這提供了一種更簡潔的方式來為可能為null的變量提供默認(rèn)值或更新它們的值,而無需編寫額外的if語句。
示例代碼:
string firstName = null;
firstName ??= "未知"; // 如果 firstName 是 null,則將其設(shè)置為 "未知"
Console.WriteLine(firstName); // 輸出: 未知
firstName = "John";
firstName ??= "未知"; // firstName 不是 null,所以不會更改其值
Console.WriteLine(firstName); // 輸出: John
// 示例使用可空類型
int? age = null;
age ??= 30; // 如果 age 是 null,則將其設(shè)置為 30
Console.WriteLine(age.HasValue ? age.Value.ToString() : "null"); // 輸出: 30
age = 25;
age ??= 30; // age 不是 null,所以不會更改其值
Console.WriteLine(age.HasValue ? age.Value.ToString() : "null"); // 輸出: 25
// 示例使用類對象的屬性
Person person = null;
person ??= new Person { Name = "默認(rèn)名稱" }; // 如果 person 是 null,則創(chuàng)建新實(shí)例并賦值
if (person != null)
{
Console.WriteLine(person.Name); // 如果 person 是新創(chuàng)建的實(shí)例,則輸出: 默認(rèn)名稱
}
person = new Person { Name = "John Doe" };
person.Name ??= "默認(rèn)名稱"; // person.Name 不是 null,所以不會更改其值
Console.WriteLine(person.Name); // 輸出: John Doe
在上面的示例中,??= 運(yùn)算符首先檢查左側(cè)的變量(或?qū)傩裕┦欠駷?code>null。如果是,則將其設(shè)置為右側(cè)的值;如果不是,則保持其當(dāng)前值不變。這種操作對于初始化可能為null的變量或在某些條件下更新它們非常有用。
請注意,最后一個示例中嘗試使用??=來更新Person對象的Name屬性可能不會按預(yù)期工作,因?yàn)?code>??=是專門為變量賦值設(shè)計(jì)的,而不是用于屬性的。在屬性上使用??=會導(dǎo)致編譯錯誤,除非該屬性是特殊的(如可空值類型的自動實(shí)現(xiàn)屬性)。
到此這篇關(guān)于C# ?的使用小結(jié)的文章就介紹到這了,更多相關(guān)C# ?使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)子窗體與父窗體通信方法實(shí)例總結(jié)
這篇文章主要介紹了C#實(shí)現(xiàn)子窗體與父窗體通信方法,實(shí)例總結(jié)了常用的四種窗體通信方法,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
C#實(shí)現(xiàn)打印與打印預(yù)覽功能的思路及代碼
這篇文章主要介紹了C#實(shí)現(xiàn)打印與打印預(yù)覽功能的思路及代碼,有需要的朋友可以參考一下2013-12-12
C#使用Spire.XLS for .NET將List數(shù)據(jù)導(dǎo)出Excel的操作指南
在現(xiàn)代數(shù)據(jù)驅(qū)動的應(yīng)用開發(fā)中,將程序內(nèi)存中的數(shù)據(jù)以結(jié)構(gòu)化的形式呈現(xiàn)給用戶是一個普遍的需求,其中,將C# List集合中的數(shù)據(jù)導(dǎo)出到Excel文件,成為了開發(fā)者們經(jīng)常需要實(shí)現(xiàn)的功能,本文將介紹如何使用 Spire.XLS for .NET將 List<T> 數(shù)據(jù)寫入Excel文件,需要的朋友可以參考下2026-02-02
C#使用ToUpper()與ToLower()方法將字符串進(jìn)行大小寫轉(zhuǎn)換的方法
這篇文章主要介紹了C#使用ToUpper()與ToLower()方法將字符串進(jìn)行大小寫轉(zhuǎn)換的方法,實(shí)例分析了C#大小寫轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-04-04

