2014-02-13 32 views
1

我有以下代碼:C#迫使我明確施放它不應該的時候,爲什麼?

public enum rkError : int {EC_SUCCESS, 
    EC_INVALID_FILE, 
    EC_UNDEFINED_HEADER, 
    EC_FILE_NOT_FOUND, 
    EC_CANNOT_CREATE}; 

...那麼,後者於:

int ok; 
. 
. 
. 
ok = hdr.Load(); 
if(ok!=rkError.EC_SUCCESS) return ok; 
. 
. 
. 

......據我瞭解,雙方OKrkError.EC_SUCCESSint,但編譯器投訴:

錯誤CS0019:運算符'!='不能應用於'int'類型的操作數,和「test.rkError」

因此爲了運行我的節目,我必須改變,如果行這樣的:

if(ok!=(int) rkError.EC_SUCCESS) return ok; 

我不明白爲什麼會這樣,因爲我把照顧明確定義rkError as int

我使用的是MonoDevelop而不是Visual Studio。這是正常的嗎?難道我做錯了什麼?

+0

爲什麼不應該呢? –

回答

4

rkError不是int。這是一個由int支持的枚舉。這不一樣。

是的,您必須將枚舉值強制轉換爲基礎基本類型,以將其與其他基本值進行比較。

+0

有什麼辦法可以避免施放?我真的在這裏使用枚舉,因爲我無法在C/C++中找到與#define等價的東西。 –

+1

使你的'Load'方法返回'rkError'而不是'int'。 – MarcinJuraszek

+1

'const static int EC_SUCCESS = 0;'比'enum'更接近'#define'。 –

相關問題