下面將介紹C#中的常用到的運算符:條件運算符,is 運算符,as 運算符,sizeof 運算符,typeof 運算符,空合並運算符,空值傳播運算符。
1、條件運算符( ?: )
條件運算符也稱作三元運算符,是if..else 的簡化形式,其名稱的出處是他帶有三個操作數。他首先判斷一個條件,如果條件為真,返回第一個值,否則返回第二個值。恰當的使用三元運算符可以使程序更加簡潔。
形式: condition ? true_value:false_value ,如:int a = c > 0 ? c -1:c+1;
// 一個方法,返回值是 int 類型,參數是 可空類型 int?,該方法用來判斷參數是否為空,不為空返回 +1 值,否則返回 0 public int GetNum(int? a) { // 1. 使用if...else if(a != null) { return (int)a + 1; } else { return 0; } // 2.使用三元運算符 return a != null ? (int)a + 1 : 0; }
可空類型的介紹和使用: 點擊打開鏈接
2、is 運算符
is 運算符用來判斷變量是否是特定的類型或者是派生自該類型,是返回 true,否則返回 false。
int a = 1; // int 類型不是 long 類型,也不派生自 long 類型 bool type = a is long; // false // int 類型是 int 類型,派生自 object 類型 bool type1 = a is object; // true bool type2 = a is int; // true
上面只是簡單的示例,下面是較復雜的,擴展:uint( 范圍:0 ~ 2^32 - 1 ),long( 范圍:-2^63 ~ 2^63 -1 ),ulong( 范圍:0 ~ 2^64 -1 )
// 50 是一個整數,如果沒有顯示聲明的話(用小寫或大寫字母: u 和 U 代表 uint ,l 和 L 代表 long),默認是 int object a1 = 50; // 特殊情況:int 類型的最大整數值是 2^31 - 1 = 2147483647,超過這個范圍,會依次按照(uint,long,ulong)的范圍去定義類型 object a2 = 2147483648; bool type3 = a1 is int; // true bool type4 = a2 is uint; // true
3、as運算符
as 運算符用於將引用類型的顯示轉換,如果要轉換的類型是原類型或者是派生自原類型,則轉換成功,否則返回 null。
注意:
(1)、as 運算符只能用於引用類型;
(2)、如果轉換不成功會返回 null。
object a = "str"; object b = 5; // a 是 string 類型隱式轉換成的 object 類型,as 轉換成功 string c = a as string; // string // b 是 int 類型隱式轉換成的 object 類型,as 將他轉換成 string 類型,返回 null string c1 = b as string; // null
4、sizeof 運算符用於返回棧中值類型所需長度(單位:字節)。
// int 是 32 位的,占 4 個字節,1 個字節是 8 位 int a = sizeof(int); // 4
5、typeof 運算符用於返回 指定類型的 System.Type 對象,常用於反射。
注意:typeof 和 GetType() 有相同的作用,區別是:typeof 的參數是 類型,GetType() 的參數是類型的變量
// typeof 的參數是類型,GetType() 方法通過類型的變量調用 Type a = typeof(AAA); AAA aa = new AAA(); Type b = aa.GetType();
6、空合並運算符(??)用於引用類型或是可空類型,返回一個非空的值,當第一個操作數不為空的時候返回第一個,否則返回第二個。
注意:空合並運算符只用於判斷 引用類型 和 可空類型 並返回一個非空的值。
// 可空類型的變量 a int? a = null; // 當 a 不為空的時候,?? 將 a 顯示轉換成了 int 類型並賦值給 b,否則 b = 0; int b = a ?? 0; AAA c = new AAA(); AAA d = c ?? new AAA();
7、空值傳播運算符(?.)用來判斷 類 的對象是否為空,為空返回空,否則返回 對應的 字段 或 屬性 值。
注意:當結果為空或其他的話,使用空值傳播運算符更加方便,常用於方法的參數判定和賦值。
public class AAA { public static int GetNum(BBB aaa) { int result = 0; if(aaa != null) { // aaa 不為空的時候判斷他的字段 bbb 是否為空,不為空返回 bbb 的 字段 ccc 的值,否則返回 0 result = aaa.bbb != null ? aaa.bbb.ccc:0; } return result; } public static int GetNum1(BBB aaa) { // 按照運算符的優先級,相同的運算符是左關聯的(從左到右計算) int result = (aaa ?.bbb?.ccc) ?? 0; return result; } } public class BBB { // 包含 CCC 類的一個變量 bbb public CCC bbb; } public class CCC { // 一個 int 類型的變量 ccc public int ccc = 1; }
運算符的優先級: 點擊打開鏈接
出處:https://blog.csdn.net/cloproad/article/details/78923363
