C#中,為什麼在實值型別後面加問號

來源:互聯網
上載者:User

標籤:style   blog   color   資料   line   資料庫   

在C#中,聲明一個實值型別或參考型別的變數,無論是否給這個變數賦初值,該變數都有預設值:

比如聲明參考型別變數: string a,其等效於string a = null,string的預設值為null。
比如聲明實值型別變數:int a, 其等效於int a = 0,int的預設值為0。

 

  為什麼需要讓實值型別可以為null?

來看需要讓實值型別為null的情境:

 

在資料庫中,通常實值型別允許為null,比如int, decimal, DateTime類型允許為null,而如果C#中對應的實值型別不能為null,在儲存資料到資料庫的時候就會造成資料類型的不一致。

 

又比如,在搜尋的情境中,服務端聲明一個變數,用來接收來自用戶端的、某個欄位的值,如果C#中不允許這個變數為null,但從用戶端傳來的欄位值有可能為null(沒有選擇某個搜尋條件),這樣也造成了前後端資料類型的不一致。

 

為了應對這些情境,C#提供了允許讓實值型別為null的文法。

 

  允許實值型別為null的寫法

DateTime? date = null; 等效於: Nullable<DateTime> date = null;
int? a = null; 等效於:Nullable<int> a = null;

 

  如何避免因實值型別為null而拋出異常?

通過if...else語句

int result;if(a == null){    result = 0;}else{    result = (int)a;}

通過??

int result = a ?? 0;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.