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试图做什么。这似乎是一个非序列,无法回答问题。这是一个评论吗?这似乎是一个不合理的结论,不能回答问题。这是一个评论吗?