關於datetime和int 是否可為null的問題


    一個對象的屬性中有一個datetime類型的屬性,在賦值時未給予賦值,此時系統會分配給它一個最小的時間,不會是null值,與int類型相似,datetime也不會有null類型,

先來看一段代碼:

null值用來表示數據類型未被賦予任何值,它是一種引用類型且它只能賦值給引用類型,由於string是一個特殊的引用類型,因此編譯器不會報錯。

但是當它賦值給值類型int類型的時候,編譯器就會報錯:

我們知道數據庫中是有NULL值的,例如下面的一張表,年齡(int類型)是可以為空的,代表目前不知道此人年齡,那么當我們在C#代碼向數據庫插入數據時,就會需要一個可空的int類型。

但是int、bool等這些類型不能表示數據庫中的“Null” 。因此C#提供了“可空類型”這種語法,只要在類型后加?就構成了可空的數據類型,比如int?、bool?,這樣
int? i=null 就可以了。解決數據庫中int可以為null,而C#中int不能為null的問題。

[csharp]  view plain copy
 
  1. using System;  
  2.  using System.Collections.Generic;  
  3.  using System.Linq;  
  4.  using System.Text;  
  5.    
  6.  namespace 可空數據類型  
  7.  {  
  8.      class Program  
  9.      {  
  10.          static void Main(string[] args)  
  11.          {  
  12.              //string s1 = null;  
  13.              int? i = null;  
  14.              Console.WriteLine(i);  
  15.          }  
  16.      }  
  17.  }  

由於i為空,所以不會有任何數據顯示。

T?其實是System.Nullable<T>的簡寫,可空類型在ADO.NET編程中大量使用,用來解決數據庫與C#代碼數據類型不一致的問題。

來看一下msdn文檔中關於System.Nullable的說明:

System.Nullable的定義:

由它的定義可知:判斷可空類型是否為空,用i==null或者i.HasValue;得到可空變量的值,int i1=(int)i.Value或者int i1=i.Value。
類型轉換:不可空類型賦值給可空類型無需顯式轉換(一定成功),可空類型賦值給不可空類型則需顯式轉換(不一定成功)

如果int? i3 = null;

[csharp]  view plain copy
 
  1. static void Main(string[] args)  
  2.          {  
  3.              int? i = null;  
  4.              int? i3 = null;  
  5.              //int? i3 = 8;//不可空類型賦值給可空類型無需顯式轉換(一定成功)  
  6.              if (i3 == null)  
  7.              {  
  8.                  Console.WriteLine("i3為空");  
  9.              }  
  10.              else  
  11.              {  
  12.                  i3++;  
  13.                  int i4 = (int)i3;//可空類型賦值給不可空類型則需顯式轉換(不一定成功)例如i3為空,則不成功!  
  14.    
  15.                  Console.WriteLine("i3不為空,{0}", i3);  
  16.              }  
  17.              if (i3.HasValue)  
  18.              {  
  19.                  int i4 = i3.Value;  
  20.                  Console.WriteLine("i3不為空,{0}", i3);  
  21.              }  
  22.              else  
  23.              {  
  24.                  Console.WriteLine("i3為空!");  
  25.              }  
  26.          }  


如果int? i3 = 8;

[csharp]  view plain copy
 
  1. static void Main(string[] args)  
  2.          {  
  3.              int? i = null;  
  4.              //int? i3 = null;  
  5.              int? i3 = 8;//不可空類型賦值給可空類型無需顯式轉換(一定成功)  
  6.              if (i3 == null)  
  7.              {  
  8.                  Console.WriteLine("i3為空");  
  9.              }  
  10.              else  
  11.              {  
  12.                  i3++;  
  13.                  int i4 = (int)i3;//可空類型賦值給不可空類型則需顯式轉換(不一定成功)例如i3為空,則不成功!  
  14.    
  15.                  Console.WriteLine("i3不為空,{0}", i3);  
  16.              }  
  17.              if (i3.HasValue)  
  18.              {  
  19.                  int i4 = i3.Value;  
  20.                  Console.WriteLine("i3不為空,{0}", i3);  
  21.              }  
  22.              else  
  23.              {  
  24.                  Console.WriteLine("i3為空!");  
  25.              }  
  26.          }  



免責聲明!

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



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