1

Convert.ToInt32()请检查以下代码,告诉我和之间有什么区别int(),为什么Convert.ToInt32显示错误?

UserType是一个枚举

// Showing error constant initializer must be compile time constant
const int case1 = Convert.ToInt32(UserType.Admin); 

const int case2 = int(UserType.Admin);
4

4 回答 4

3

您正在将方法的返回值分配给常量,这是不允许的。在 .Net 中,需要在编译时知道常量的值。如果在运行时从方法调用中为其分配值,则这是不可能的。

对于一般情况,您可以稍微改变它并拥有逻辑上等效的代码:

static readonly int Case1 = Convert.ToInt32(UserType.Admin);

但是,枚举允许对 an 进行简单的转换int,因此您的第二个示例可能是好的(尽管不是惯用的)。

于 2012-06-28T12:22:26.460 回答
1

Convert.ToInt32是一个需要调用的方法。
它不是编译时常量,需要在运行时调用。

(int)UserType.Admin在编译时是常量,因为UserType.Admin它是一个常量并且(int)只是转换为 int。编译器可以毫无问题地对此进行评估。没有要调用的方法。

我宁愿建议不要将枚举转换为整数,因为与枚举类型相关的原始含义会丢失。

于 2012-06-28T12:24:08.693 回答
1

您收到此错误是因为:

常量表达式是可以在编译时完全计算的表达式。

常量 - MSDN

而且您Convert.ToInt32()不是编译时常量表达式,而是一种方法。

第 2 部分:

const int case2 = int(UserType.Admin);

我相信你的意思是

const int case2 = (int)UserType.Admin;
于 2012-06-28T12:26:44.847 回答
-1

(int) 将只转换可以表示为整数的类型(即双精度、长整数、浮点数等),尽管可能会发生一些数据丢失。

Int32.Parse 只会将字符串转换为整数。您不能将(即(int)mystring)字符串转换为整数。

于 2012-06-28T12:23:45.927 回答