2017-09-02 100 views
-1

我已經寫以下代碼:在C#中,可以使用AS關鍵字提取值嗎?怎麼樣?

 object obj = 123; // Line 1 
     int? num = null; // Line 2 
     num = obj as int; // Line 3 

我正在編譯時間錯誤在第3行作爲 - 「as關鍵字必須參考類型或空類型被使用(‘INT’是一個非空值類型)」。

我想明白了:
1.雖然我的int是空的,那麼爲什麼它給這個錯誤
2.我們怎樣才能獲得obj的NUM中的價值? AS關鍵字不會在這裏工作嗎?

回答

4

Int?int是兩種不同的類型。

變化

num = obj as int; // Line 

num = obj as int?; 

的可讀性,你甚至可以寫:

Nullable<int> num; 
num = obj as Nullable<int>; 

我要擴展這個多一點,說,怎麼辦你從可空對象中獲得值。那麼,這是一種方法。

object obj = 123; 
int? num; 
num = obj as int?; 
int myNumericValue = default(int); 
If (num.HasValue) myNumericValue = num.Value; 
1

爲了這個工作....

num = obj as int; // Line 3 

...的as運營商必須能夠返回null如果obj不能轉換爲int。但是int不能存儲空值,所以會導致錯誤。

你有兩種選擇:

1.使用可空INT

int? num; 
num = obj as int?; 

2.使用多一點的代碼

int num; 
num = (obj is int) ? (int)obj : default(int); 
相關問題