2011-09-12 101 views
2

可能重複:
Direct casting vs 'as' operator?
Casting vs using the 'as' keyword in the CLR「object as type」和「((type)object)」有什麼區別?

object myObject = "Hello world."; 
var myString = myObject as string; 

object myObject = "Hello world."; 
var myString = (string)myObject; 

我見過的類型轉換這兩種方式。有什麼不同?

+0

看到我關於這個問題的文章:http://blogs.msdn.com/b/ericlippert/archive/2009/10/08/what-s-the-difference-between-as-and-cast-operators。 aspx –

回答

3
var myString = myObject as string; 

它只檢查運行時間類型myobject。如果它的string,那麼它只能投射爲string,否則只是返回null

var myString = (string)myObject; 

查找implicit轉換爲串從源類型。如果運行時類型都不是string,也不存在implicit轉換,則會引發異常。

閱讀項目3:選擇isas運營商從Bill Wagner的Effective C#投射

+0

這是否意味着'(string)myInt'會返回一個myInt的字符串值,但'myInt as string'會返回null? – Chev

+0

它尋找明確的轉換,不是嗎? – dlev

+0

@dlev:否...... – Nawaz

6

如果失敗,「as」將把結果設置爲null

如果失敗,顯式強制轉換將拋出異常。

+0

謝謝!我從未意識到這一點。 – Chev

1

如果對象無法轉換爲目標類型,則強制轉換將拋出異常。 as只會返回null

相關問題