一般說來,null表示空型別,也就是表示什麼都沒有。在.net中,null表示乙個物件引用是無效的。作為引用型別變數的預設值,null是針對指標(引用)而言的,它是引用型別變數的專屬概念,表示乙個引用型別變數宣告但未初始化的狀態。在.net中,對null有如下的基本規則和應用://丟擲編譯時錯誤一直以來,null 都是引用型別的特有產物,對值型別進行 null 操作將在編譯器丟擲異常提示,例如:
2:int i = null;
3:if (i==null)
4:
很多情況下,作為開發人員,我們更希望能以一種統一的方式來處理,同時也希望能夠解決實際業務需求中對於「值」也可以為「空」這一實際情況的對映。因此,自.net 2.0以來,這一特權被新的 system.nullable(即,可空值型別)的誕生打破,解除上述詬病可以很容易以下面的方式被實現:1://nullable,解決了這一問題
2:int? i = null;
3:if (i==null)
4:
你可能很奇怪上述的例子中並沒有任何nullable的影子,實際上這是c#的乙個語法糖,以下**在本質上市完全等效的:int? i = null;可空型別的偉大意義在於,通過nullable型別,.net為值型別新增「可空性」,例如 nullable的值就包括了 true、false 和 null,而 nullable則表示值既可以為整型也可以為 null。同時,可空型別實現了統一的方式來處理值型別和引用型別的「空」值問題,使得值型別也可以在執行時以 nullreferenceexception 異常來處理。 另外,可控型別是內置於clr的,因此它並非c#的獨門絕技。nullable
i = null;
對於可空型別的小結:
1:int? a = 100;
2: int32 b = (int32)a;3: a = null;4:5:int? c = (int?)200;
在實際的程式開發中,為了有效的避免發生異常情況,進行 null 判定是經常發生的事情。例如對於任意物件執行 tostring()操作,都應該進行必要的 null 檢查,以避免發生不必要的異常提示,使用傳統的三元運算子 (?:):1:object obj = new
object();
2:string objname = obj == null ? string.empty : obj.tostring();
3: console.writeline(objname);
.net 2.0 中提供了新的操作運算子來簡化 null 值的判定過程,這就是 ?? 運算子。以上過程可以使用以下**來實現:1:object obj = null;
2:string objname = (obj ?? string.empty).tostring();
3: console.writeline(objname);
?? 運算子,又稱為 null-coalescing operator,如果左側運算元為 null,則返回右側運算元的值,如果不為 null 則返回左側運算元的值。它既可以應用於可空型別,又可以應用於引用型別。應用 ??運算子實現了簡潔的 null 判定,例如通過 ?? 運算子,可以實現乙個有意思的**技巧:1:string a = null;
2:string b = null;
3:object c = 1;
4: console.writeline(a ?? null ?? b ?? null ?? c ?? null);
通過多次的 ?? 判定,可以很容易的從一堆候選者 a、b、c中挑選出不是null的那個。
認識全面的NULL(摘抄)
1 null並不等同於0,也不等同與string.empty,也不等於數字0,null是標示引用的一種狀態,標示什麼都沒有,為乙個空引用。2 null為引用物件的預設值。3 對任何值為null的物件進行操作,都會丟擲nullreferenceexception異常。4 判斷乙個物件是否為null,可...
爬蟲全面認識
爬蟲 其實爬蟲就像乙個瀏覽器瀏覽網上的資訊 只是我們稱之為爬蟲是因為它不是人為而是機器自動獲取某些程式設計師設定的信 息,對於某些 它不想讓爬蟲獲取訊息,我們稱之為反爬。裡面的具體一些技術,我會一 一解釋和貼原始碼 文章只是自己學習沒有任何商業用途。1 爬蟲用到的語言 python2 html js...
Google Exoplayer 之全面認識
demo 演示類庫的使用 支援高階 hls http live streaming 功能,如正確處理 ext x discontinuity的標籤。能夠無縫融合,串聯和迴圈 資源。支援定製和擴充套件,exoplayer是考慮到這一點而設計的,並允許許多部件與定製實現替換。更新起來更方便 裝置通用性更...