2013-11-04 40 views
2

我有一個枚舉:爲什麼在檢查變量是枚舉值時不能使用'as'?

public enum MyEnum 
{ 
    EnumValue1, 
    EnumValue2, 
} 

假如我有一個對象,我想檢查是一個MyEnum對象,我得到的第一行編譯時錯誤:

var myEnumValue = enumObject as MyEnum; 

if(myEnumValue != null) 
{ 
... 
} 

但我可以做到以下幾點:

var myEnumValue = (MyEnum)enumObject; 

(但可能引發異常)

所以我必須使用:

if(enumObject is MyEnum) 
{ 
//and then assign enumObject to a MyEnum object 
} 

改爲。

問題

爲什麼使用as這裏沒有允許的,但鑄造或使用is是什麼?

+2

'as'意味着:投如果可能的話,返回'空否則。 'null'不是枚舉的有效值。不過你可以使用'MyEnum?'。 「 –

回答

7

您不能使用任何值類型的asnullable types除外)。

原因是as關鍵字返回null如果對象不能被轉換,但是,值類型不能是null

+5

」你不能像任何值類型那樣使用。「 - 實際上,你可以使用'as'作爲**,只有**的可用值類型。想想看...(讓我知道你是否想要提示) –

+0

他的意思是可以放大哈哈。 +1爲「正好一半」位) – dcastro

+1

@MarcGravell是的,我想出了你發表評論後幾秒的意思。 –

1

枚舉是值類型,它不能爲空。 as需要返回一個Nullable類型。

但是,如果你想安全地轉換值類型,你可以明確地使用一個可空和定義一個默認值,如果as返回null:

var myEnumValue = enumObject as MyEnum? ?? MyEnum.EnumValue1;