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