Asp.net中的NULL的初步理解

來源:互聯網
上載者:User

1.什麼是null  

  一般說來,null表示空類型,也就是表示什麼都沒有,但是“什麼都沒有”並不意味“什麼都不是”。實際上,null是如此的重要,以致於在JavaScript中,Null類型就作為5種基本的原始類型之一,與Undefined、Boolean、Number和String並駕齊驅。這種重要性同樣表現在.NET中,但是一定要澄清的是,null並不等同於0,"",string.Empty這些通常意義上的“零”值概念。相反,null具有實實在在的意義,這個意義就是用於標識變數引用的一種狀態,這種狀態表示沒有引用任何對象執行個體,也就是表示“什麼都沒有”,既不是Object執行個體,也不是User執行個體,而是一個Null 參考而已。在.NET中,null表示一個對象引用是無效的。作為參考型別變數的預設值,null是針對指標(引用)而言的,它是參考型別變數的專屬概念,表示一個參考型別變數聲明但未初始化的狀態,例如:

 

object obj = null;

 

 

2 Nullable<T>(可空類型)

一直以來,null都是參考型別的特有產物,對實值型別進行null操作將在編譯器拋出錯誤提示,例如:

//拋出編譯時間錯誤int i = null;  

正如樣本中所示,很多情況下作為開發人員,我們更希望能夠以統一的方式來處理,同時也希望能夠解決實際業務需求中對於“值”也可以為“空”這一實際情況的映射。因此,自.NET 2.0以來,這一特權被新的System.Nullable<T>(即,可空實值型別)的誕生而打破,解除上述詬病可以很容易以下面的方式被實現:

//Nullable<T>解決了這一問題int? i = null;

你可能很奇怪上述樣本中並沒有任何Nullable的影子,實際上這是C#的一個文法糖,以下代碼在本質上是完全等效的:

int? i = null;            Nullable<int> i = null;

顯然,我們更中意以第一種簡潔而優雅的方式來實現我們的代碼,但是在本質上Nullable<T>和T?他們是一路貨色。可空類型的偉大意義在於,通過Nullable<T>類型,.NET為實值型別添加“可空性”,例如Nullable<Boolean>的值就包括了true、false和null,而Nullable<Int32>則表示值即可以為整形也可以為null。

對於可空類型,使用注意:

  • 可空類型表示值為null的實值型別。
  • 不允許使用嵌套的可空類型,例如Nullable<Nullable<T>> 。
  • Nullable<T>和T?是等效的。
  • 對可空類型執行GetType方法,將傳回型別T,而不是Nullable<T>。
  • c#允許在可空類型上執行轉換和轉型,例如:
int? a = 100;            Int32 b = (Int32)a;            a = null;

3 ??運算子

  在實際的程式開發中,為了有效避免發生異常情況,進行null判定是經常發生的事情,例如對於任意對象執行ToString()操作,都應該進行必要的null檢查,以免發生不必要的異常提示,我們常常是這樣實現的:

string objName = obj == null ? string.Empty : obj.ToString();

  因為上述實現是如此的頻繁,所以.NET 3.0中提供了新的操作運算子來簡化null值的判斷過程,這就是:??運算子。上述過程可以以更加震撼的代碼錶現為:

string objName = (obj ?? string.Empty).ToString();

  ??運算子,又稱為null-coalescing operator,如果左側運算元為null,則返回右側運算元的值, 如果不為null則返回左側運算元的值。它既可以應用於可空類型,又可以應用於參考型別。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.