程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> C#中 ??、 ?、 ?: 、?.、?[ ],

C#中 ??、 ?、 ?: 、?.、?[ ],

編輯:關於.NET

C#中 ??、 ?、 ?: 、?.、?[ ],


1. 可空類型修飾符(?)
引用類型可以使用空引用表示一個不存在的值,而值類型通常不能表示為空。
例如:string str=null; 是正確的,int i=null; 編譯器就會報錯。
為了使值類型也可為空,就可以使用可空類型,即用可空類型修飾符"?"來表示,表現形式為"T?"
例如:int? 表示可空的整形,DateTime? 表示可為空的時間。
T? 其實是System.Nullable(泛型結構)的縮寫形式,
也就意味著當你用到T?時編譯器編譯時會把T?編譯成System.Nullable的形式。
例如:int?,編譯後便是System.Nullable的形式。

2. 三元(運算符)表達式(?:)
例如:x?y:z 表示如果表達式x為true,則返回y;
如果x為false,則返回z,是省略if{}else{}的簡單形式。

3. 空合並運算符(??)
用於定義可空類型和引用類型的默認值。
如果此運算符的左操作數不為null,則此運算符將返回左操作數,否則返回右操作數。
例如:a??b 當a為null時則返回b,a不為null時則返回a本身。
空合並運算符為右結合運算符,即操作時從右向左進行組合的。
如,“a??b??c”的形式按“a??(b??c)”計算。

4.NULL檢查運算符(?.)

  例如我們要獲取一個Point序列的第一個點的X坐標,第一感覺會這麼寫:

    int firstX = points.First().X;

  但是,老鳥會告訴你,這兒沒有進行NULL檢查,正確的版本是這樣的:

   int? firstX = null;    
  if (points != null)     
{  
 var first = points.FirstOrDefault();   
     if (first != null)        
     firstX = first.X;   
 }

  正確倒是正確了,代碼取變得難讀多了。在C# 6.0中,引入了一個 ?. 的運算符,前面的代碼可以改成如下形式:

    int? firstX = points?.FirstOrDefault()?.X;

  從這個例子中我們也可以看出它的基本用法:如果對象為NULL,則不進行後面的獲取成員的運算,直接返回NULL

  需要注意的是,由於"?."運算符返回的可以是NULL,當返回的成員類型是struct類型的時候,"?."和"."運算符的返回值類型是不一樣的。

     Point p = new Point(3, 2);    

   Console.WriteLine(p.X.GetType() == typeof(int));        //true    

   Console.WriteLine(p?.X.GetType() == typeof(int?));        //true

 5"?[]"運算符:

    int? first = customers?[0].Orders.Count();

(這個不太清楚,感覺微軟語法糖用過頭了。)

本質:都使用了語法糖,在編譯階段編譯器會把特殊符號先轉譯成原始狀態再編譯。

來源:http://blog.sina.com.cn/s/blog_72463843010195ru.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved