2016-07-29 76 views
3

我在考試中看到過這個代碼示例問題,它完美地工作。什麼是「int?」在C#類型中

namespace Trials_1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int? a = 9; 
      Console.Write("{0}", a); 
     } 
    } 
} 

但是,下面的代碼會引發錯誤CS0266。

namespace Trials_1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int? a = 9; 
      int b = a; 
      Console.Write("{0},{1}", a, b); 
     } 
    } 
} 

有人可以詳細解釋我嗎?

+0

的可能的複製[如何轉換C#可空int到int](http://stackoverflow.com/questions/5995317/how-to-convert-c-sharp-nullable-int-to-int) – MickyD

回答

4

這是一個C#nullable types

空類型表示可以分配空的值值型變量。您不能基於引用類型創建可爲空的類型。 (引用類型已支持null值。)

此行int b = a;拋出一個錯誤,因爲你不能直接分配int類型爲nullable int類型。換句話說,int數據類型不能接受null的值。

1

一些信息上的錯誤CS0266

無法隱式轉換類型 '類型1' 到 '2型'。存在明確的轉換(您是否缺少轉換?) 當您的代碼嘗試在不能隱式轉換的兩種類型之間進行轉換時,會出現此錯誤,但顯式轉換可用。

可空int(int?)不能簡單地轉換爲int。默認情況下,int不能爲空,因此試圖將可以爲null的內容轉換爲不能爲null的內容會導致出現此錯誤。因爲你試圖做出這個假設,編譯器告訴你,你不能。

請參閱this發佈如何從可空int轉換爲int。

2

int?Nullable<int>的簡寫,並且指示可以將值null分配給該變量。

在給出的示例中,變量b的類型是int,它不能接受值Nullable<int>

有關更多信息,請參閱This MSDN article

2

如果你想轉換一個int?爲INT,你要投它:

int? a = 9; 
int b = (int)a; 

或者:

int b = a.Value; 

順便說一句:這woont給任何問題:

int a = 9; 
int? b = a; 
0

變量bint類型的,你是試圖將int?分配給int。這將是錯誤的分配(如果a爲空,那麼你可以將其分配給非空的對象b,所以編譯器將不允許這樣):另外,您可以使用:

int? a = 9; 
int b = a == null ? 0 : 1; 
Console.Write("{0},{1}", a, b);