程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型秘訣(4)(3)

C#泛型秘訣(4)(3)

編輯:關於C語言

討論

本質上,下面兩個聲明是等價的:

int? myDBInt = null;
Nullable<int> myDBInt = new Nullable<int>();

兩個聲明中,myDBInt都被認為是可空類型並初始化為null。一個可空類型實現了InullableValue接口,它只有兩個屬性成員:HasValue和Value。如果把可空類型設置為null,HasValue屬性將返回false,否則將返回true。如果HasValue返回true,就可以訪問Value屬性以獲得可空數據類型裡當前存放的值。如果引發了InvalidOperationException異常,這是因為此時Value屬性還未被定義。

另外,測試可空類型可以有兩種方法。第一,使用HasValue屬性如下:

if (myDBInt.HasValue)
    Console.WriteLine("Has a value: " + myDBInt.Value);
  else
  Console.WriteLine("Does not have a value (NULL)");

第二種方法是跟null對比:

if (myDBInt != null)
    Console.WriteLine("Has a value: " + myDBInt.Value);
  else
  Console.WriteLine("Does not have a value (NULL)");

兩種方法都可以讓人接受。

當需要把可空類型轉換為非可空類型時,轉換操作將正常進行,如果可空類型被設置為null就會引發一個InvalidOperationException異常。當把一個非可空類型轉換為可空類型時,轉換操作將正常運行,不會引發InvalidOperationException異常,非可空類型永遠不會為null。

需要提防的是可空類型在進行比較運算的時候。例如執行下列代碼時:

if (myTempDBInt < 100)
    Console.WriteLine("myTempDBInt < 100");
  else
    Console.WriteLine("myTempDBInt >= 100");
“myTempDBInt < 100”這句代碼明顯有錯。為了修正它,您不得不檢查myTempDBInt是否為空。如果不是,才能執行if語句裡的代碼塊:
if (myTempDBInt != null)
   {
     if (myTempDBInt < 100)
       Console.WriteLine("myTempDBInt < 100");
     else
       Console.WriteLine("myTempDBInt >= 100");
   }
   else
   {
     // 在這裡處理空值
}

另外一個有趣的事情是您可以象使用一般數字類型一樣使用可空類型,如:

int? DBInt = 10;
   int Value = 2;
int? Result = DBInt + Value; // Result == 12

如果表達式中的可空類型是一個null值,則表達式的結果為null,但如果沒有可空類型的值為null,運算符會把它當成一般類型。如上例中的DBInt為null,則Result的結果也為null。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved