Convert.ToInt32()和int()之间的区别是什么

时间:2012-06-28 12:18:52

标签: c# int

请检查以下代码,告诉我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 个答案:

答案 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)

您收到此错误的原因是:

  

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

const - MSDN

你的Convert.ToInt32()不是编译时常量表达式,它是一种方法。

第二部分:

const int case2 = int(UserType.Admin);

我相信你的意思

const int case2 = (int)UserType.Admin;

答案 3 :(得分:-1)

(int)只会转换可以表示为整数的类型(即double,long,float等),尽管可能会发生一些数据丢失。

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