C# 2.0中的可空類型以及?和??



    最近在學習C# 2.0,在.NET Framework 2.0中新增加了System.Nullable泛型結構,它具有處理值類型數據具和處理null的功能。例如:
System.Nullable < int >  i  =   2 ;
=   null ;
System.Nullable
< bool >  b  =   null ;

    另外C#中還提供了上述表示方法的簡寫形式:
int ?  i  =   null ;
bool ?  b  =   null ;

    此時,i除了可以正常處理int值外還可以被賦值為null;b則可以處理true、false和null值。感覺上好像“值類型可以處理null”似的,實際上,上面的System.Nullable<int>是對int的一種擴展,前者可被稱為“可空的int”,后者被稱為“非空的int”,它們所指的並非同一事物。因此,當把一個可空類型值賦給一個非空類型時,將引發編譯錯誤,例如:
int ?  ni  =   null ;
int  i  =  ni;   // 這一句將引發編譯錯誤

    推薦的方法是賦值前對可空類型的值進行檢查,在C#中使用??運算符分配默認值,如:
int ?  ni  =   null ;
int  i  =  ni  ??   0 ;

    ??運算符會首先判斷左操作數是否為空,如果為空則返回??后面給出的默認值,否則返回左操作數,其意義類似於:
int ?  ni  =   null ;
int  i  =  ni.HasValue  ?  ni.Value :  0 ;


    提醒:System.Nullable<int>並不等同於int,值類型還是值類型,int類型不能處理null,System.Nullable<int>是一種新的結構類型,被用來處理int類型數據和null。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com