可空類型Nullable


Nullable類型:

值類型變量默認為0,不可空,為了使它可空,出現了Nullable類型,類型前面加?  變為引用類型

 

值類型是沒有null值的,比如int,DateTime,它們都有默認值。舉個例子,在訪問數據庫時,會存在一定的問題,Person類有字段Age(int類型),Birthday(DateTime),如果沒有給它們賦值,我們期望的是向數據庫插入時,應該是null,而不是0和0001-01-01;同樣從數據庫取值時也是如此,如果數據值為null,我們也希望Age和Birthday的值能反應出來,如果不使用int?和DateTime?就做不到。

Nullable 類型(結構體)是System.Nullable<T> 這種結構體的實例,一個Nullable類型可以代表他的值類型的正確的范圍,同時添加了為“空”的值。

例如,一個Nullable<Int32>,聲明了“Int 32的可空類型”,可以被賦值“-2147483648 to 2147483647”,或者可以被賦值 空。Nullable<bool> 可以被賦值“true,false,null”.對數值類型和bool類型 ,當處理數據庫或者一些數據類型,不能對某些字段賦值的時候,可以賦為“null”尤為重要。例如 Boolean類型變量,在數據庫可以存儲"true false"或者未定義。

int? 相當於 Nullable<int>

Guid? 相當於 Nullable<Guid>

class NullableExample
{
    static void Main()
    {
        int? num = null;

        // Is the HasValue property true?
        if (num.HasValue)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

OutPut:
num = Null
Nullable object must have a value.

特性:
1:可為NUll,不能創建一個可空類型基於一個引用類型
2:語法T?是 Nullable<T>的簡寫,T是一個值類型,兩種形式可以相互轉換。
3:
for example int? x = 10; 
or double? d = 4.108.
A nullable type can also be assigned the value null: int? x = null.
4:用
  •  HasValue and Value 只讀屬性,if(x.HasValue) j = x.Value;

  • HasValue-->true/false(default:false)

  Value(property)-->value/System.InvalidOperationException  is thrown

6:==  & != 可用於NUllable,  if(x!=null)y=x;

7:??指定現在值為NULL的defaultValue      int? x= null; int y = x??-1

8:不允許嵌套的Nullable   :

Nullable<NUllable<int>>  n;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM