【发布时间】:2012-06-18 15:44:28
【问题描述】:
我很想知道为什么 C# 编译器只给我第二个 if 语句的错误消息。
enum Permissions : ulong
{
ViewListItems = 1L,
}
public void Method()
{
int mask = 138612833;
int compare = 32;
if (mask > 0 & (ulong)Permissions.ViewListItems > 32)
{
//Works
}
if (mask > 0 & (ulong)Permissions.ViewListItems > compare)
{
//Operator '>' cannot be applied to operands of type 'ulong' and 'int'
}
}
【问题讨论】:
-
这个错误的原因很清楚。在第二个示例中,您尝试使用整数执行非法操作。在第一个示例中,
32被视为ulong。您实际上应该将mask设为ulong。 -
@Ramhound 要么(使
compare成为ulong),要么使compare成为const变量,所以const int compare = 32;。如果常量表达式为非负数,它们会很高兴地在编译时自动从int转换为ulong,名称为隐式常量表达式转换。