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);
您正在将方法的返回值分配给常量,这是不允许的。在 .Net 中,需要在编译时知道常量的值。如果在运行时从方法调用中为其分配值,则这是不可能的。
对于一般情况,您可以稍微改变它并拥有逻辑上等效的代码:
static readonly int Case1 = Convert.ToInt32(UserType.Admin);
但是,枚举允许对 an 进行简单的转换int
,因此您的第二个示例可能是好的(尽管不是惯用的)。
Convert.ToInt32
是一个需要调用的方法。
它不是编译时常量,需要在运行时调用。
(int)UserType.Admin
在编译时是常量,因为UserType.Admin
它是一个常量并且(int)
只是转换为 int。编译器可以毫无问题地对此进行评估。没有要调用的方法。
我宁愿建议不要将枚举转换为整数,因为与枚举类型相关的原始含义会丢失。
您收到此错误是因为:
常量表达式是可以在编译时完全计算的表达式。
而且您Convert.ToInt32()
不是编译时常量表达式,而是一种方法。
第 2 部分:
const int case2 = int(UserType.Admin);
我相信你的意思是
const int case2 = (int)UserType.Admin;
(int) 将只转换可以表示为整数的类型(即双精度、长整数、浮点数等),尽管可能会发生一些数据丢失。
Int32.Parse 只会将字符串转换为整数。您不能将(即(int)mystring)字符串转换为整数。