2010-12-20 103 views
2

當我使用下面的代碼時,感覺就像我在某處出錯了。從對象中獲取int值

object obj = 1; 
int i = int.Parse(obj.ToString()); 

有沒有更簡單的方法?

+2

您可以使用TryParse更好的異常處理。但是,這不會比這更簡單。 – 2010-12-20 10:12:21

+0

你的方式很好,但也有其他轉換方法。 – 2010-12-20 10:12:26

回答

5

那麼,什麼是其實obj?如果它僅僅是一個盒裝int,後來乾脆投拆箱:

int i = (int)obj; 

對於不太預定的內容,您也可以嘗試:

int i = Convert.ToInt32(obj); 

將處理大量的場景和不添加額外string在混合。

2

試試這個:

object obj = 1; 

// Option 1: Convert. This will work when obj contains anything 
// convertible to int, such as short, long, string, etc. 
int i = Convert.ToInt32(obj); 

// Option 2: Cast. This will work only when obj contains an int, 
// and will fail if it contains anything else, like a long. 
int i = (int)obj; 
0

你應該投:

object obj = 1; 
int i = (int) obj; 

這就是所謂的靜態澆鑄。

爲了您的信息,還有另外一個鑄稱爲動態轉換隻能參照工種(即可以有null值的類型),所以在此情況下(int是值類型):

object obj = DateTime.Now; 
DateTime date = obj as DateTime; 

這兩種方法的區別在於,如果鑄造對象沒有所需的類型,它將在第一種情況下(靜態轉換)引發異常,並且在第二種情況下(動態轉換)將返回null。