C#强迫我在不应该的时候明确投射,为什么?

时间:2014-02-13 02:20:31

标签: c# casting

我有以下代码:

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;
.
.
.

...据我所知, ok rkError.EC_SUCCESS 都是 int ,但编译器投诉:

错误CS0019:运算符'!='无法应用于'int'和'test.rkError'类型的操作数

所以为了运行我的程序,我必须像这样更改if行:

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

我不明白为什么会发生这种情况,因为我负责明确将rkError定义为 int

我使用的是MonoDevelop而不是Visual Studio。这是正常的吗?我做错了什么?

1 个答案:

答案 0 :(得分:4)

rkError不是int。这是由int支持的枚举。那不一样。

是的,您必须将枚举值转换为基础原始类型,以将其与另一个原始值进行比较。