【C#】--關於bool?和bool


1、bool?和bool (VS2012版本下的)

      bool關鍵字是System.Boolean的別名(實際上bool是基本值類型,Boolean是對象;bool是C#中的,Boolean是.net Framework中的。其實它們倆是一樣啦,沒什么差別的),用於生成變量存儲布爾值true、false。bool數據類型在內存中占1個字節。但bool? 可以為null的類型(下面擴展中有解釋的),包含三個不同的值:true、false和null。bool變量的默認值為 false,而bool?變量的默認值為 null。 所以 bool? 類型不能用在條件語句(如if、for或while)中,否則會導致編譯器的錯誤。
例如:

bool? b=null;
if(b) 
{
}

      上訴代碼是不允許的,因為null 在條件上下文中的含義並不清楚,若要在條件語句中使用 bool?,請首先確定其HasValue不是null,然后再將它強制轉換為bool;如果對使用null 值的 bool? 執行強制轉換,那么將會引發 InvalidOperationException異常
      因此,微軟給出下面的方法可以  將bool?安全的強制轉換為bool (這個才是重點呢)

bool? test = null;
...
if(!test.HasValue) //選擇一個值
{
test = IsInitialized();
}
if((bool)test)
{
...
}

注意: 在C++中,bool 類型的值可以轉換為 int 類型的值,也就是說:false 等效於零值,而 true 等效於非零值。但在C#中,不存在bool類型與其他類型之間的相互轉換。
2、擴展:C#中使用可以為null的類型
(1)可以為null的類型有兩種聲明方式:
         System.Nullable<T> variable      或      T? variable
         T 是可以為null 的類型的基礎類型,T 可以是包括 struct 在內的任何值類型,但不能是引用類型。其實 T? 意思就是 T范圍值+ 上可為空的值。
(2)類型示例
         任何值類型都可用作可以為 null 的類型的基礎,如:

int? i = 10;
double? d1 = 3.14;
bool? flag = null;
char? letter = 'a';
int?[] arr = new int?[10];

  ######    bool, string, int 這些叫做值類型(value type);Boolean, String, Int32這些叫做引用類型(Reference Type)。值類型是存在內存的 stack(堆棧)中的,而引用類型存在 heap(堆)中。
(3)成員
       可以為 null 的類型的每個實例都具有兩個公共的只讀屬性:
       HasValue
           HasValue 屬於 bool 類型。 當變量包含非 null 值時,它被設置為 true。
       Value
           Value 的類型與基礎類型相同。 如果 HasValue 為 true,則說明 Value 包含有意義的值。 如果 HasValue 為 false,則訪問 Value 將引發 InvalidOperationException異常。

 

 --后記:上課時老師提到的,然后我在CSDN和其他網站查了下,總結下來了,@_@


免責聲明!

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



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