天天看點

得到一個空值

也許你感覺到制造一個空值(null)是一個不值一提的話題

看看以下代碼

1

得到一個空值

 public class Check//支票

2

得到一個空值

 {

3

得到一個空值

 public string Signing;

4

得到一個空值

 public double Money; 

5

得到一個空值

 }

Check的執行個體在沒有給Signing和Money指派前,Signing和Money是什麼值呢?

輸出勝于雄辯

得到一個空值

 Check check = new Check();

得到一個空值

 System.Console.WriteLine(check.Signing);//一個空行

得到一個空值

 System.Console.WriteLine(check.Money);//0

我們得到Money有了預設的double值:0

但Signing是不是空呢?

得到一個空值
得到一個空值

 System.Console.WriteLine(check.Signing==string.Empty);//False

得到一個空值

 System.Console.WriteLine(check.Signing==null);//True

結果證明了Signing是null,而不是空的字元串。看來不給Signing指派和直接指派為null的結果是一樣的。

但是,Money為什麼是0,而不是null呢?是不是隻要給Money指派為null,就可以得到我們要的空的double呢?

得到一個空值
得到一個空值

 check.Money = null;//無法将 NULL 轉換成“double”,因為它是一種值類型

失敗的原因呢?還是我們上一篇說的,引用類型允許在運作時才知道值的大小,而值類型必須在編譯時就知道值的大小和指派。

不過這樣的值類型特征在有些時候非常的不合适,假設我們要判斷使用者是不是給Signing指派過,我們可以簡單的編寫check.Signing == string.Empty || check.Signing == null,但對于Money就不能簡單地以System.Console.WriteLine(check.Money==0)來判斷,因為使用者可以顯式的指派為0。那怎麼辦呢?

得到一個空值
得到一個空值
得到一個空值
得到一個空值

 public double? Money; 

得到一個空值

注意第4行的double?,該類型允許為Money指派為null

以下代碼運作通過

得到一個空值
得到一個空值

 check.Money = null;//

得到一個空值

 System.Console.WriteLine(check.Money==null);//True

如果不給Money指派,他還是null嗎?

恩,是的,把這個class改為struct來證明

得到一個空值

 public struct Check//支票

得到一個空值
得到一個空值
得到一個空值
得到一個空值

沒有構造函數的struct會為每個字段賦預設值,輸出上面struct的Money,你得到的結果是null

本文轉自shyleoking 51CTO部落格,原文連結:http://blog.51cto.com/shyleoking/806253