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

C# Convert.ToInt32()和int()之间的区别是什么,c#,int,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); 您正在将方法的返回值赋

请检查以下代码告诉我
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);

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

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

对于一般情况,您可以对此稍作修改,并使用逻辑等效的代码:

static readonly int Case1 = Convert.ToInt32(UserType.Admin);
但是,枚举允许对
int
进行简单的强制转换,因此您的第二个示例可能还可以(尽管不是惯用的)。

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

Parse将只将字符串转换为整数。您不能将(ie(int)mystring)字符串强制转换为整数。

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


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

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

(int)UserType.Admin
在编译时是常量,因为
UserType.Admin
是常量,
(int)
只是int的转换。编译器可以毫无问题地对其进行计算。没有要调用的方法


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

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

(int)UserType.Admin
在编译时是常量,因为
UserType.Admin
是常量,
(int)
只是int的转换。编译器可以毫无问题地对其进行计算。没有要调用的方法


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

出现此错误是因为:

常量表达式是一个可以在 编译时

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

第二部分:

const int case2 = int(UserType.Admin);
我相信你的意思是

const int case2 = (int)UserType.Admin;

出现此错误是因为:

常量表达式是一个可以在 编译时

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

第二部分:

const int case2 = int(UserType.Admin);
我相信你的意思是

const int case2 = (int)UserType.Admin;

你是说int.Parse(UserType.Admin)吗?不同之处在于操作的结果。(int)(某些值)执行强制转换,并可能以意外结果结束。而Convert.ToInt32专用于将其他兼容值转换为32位整数。-@这不是问题。你是说int.Parse(UserType.Admin)吗?区别在于操作的结果。(int)(某些值)执行强制转换,并可能以意外结果结束。而Convert.ToInt32专用于将其他兼容值转换为32位整数。-@ElYusubov:这不是问题。作为替代方案,您可以将其声明为
只读
,这将允许您使用
Convert.ToInt32
方法(如果您确实需要)。稍有不同,但可能可以接受,具体取决于您的设计。我认为在这种情况下,
静态只读
更合适
const
应与不太可能改变的值一起使用(即
Math.PI
)。如果您有一个可能更改的常量,请使用
只读
(参见此)。@PaoloMoretti:同意,我只是不知道OP正在尝试做什么。或者,您可以将其声明为
只读
,这将允许您使用
转换.ToInt32
方法(如果您确实需要)。稍有不同,但可能可以接受,具体取决于您的设计。我认为在这种情况下,
静态只读
更合适
const
应与不太可能改变的值一起使用(即
Math.PI
)。如果你有一个常数可能会改变,请使用一个
只读的
(参见此)。@PaoloMoretti:同意,我只是不知道OP试图做什么。这似乎是一个非序列,无法回答问题。这是一个评论吗?这似乎是一个不合理的结论,不能回答问题。这是一个评论吗?