C# 是否需要将具有选定值的枚举强制转换为int?
是否需要将带有选定值的C# 是否需要将具有选定值的枚举强制转换为int?,c#,enums,C#,Enums,是否需要将带有选定值的枚举强制转换为int MessageType是my DB中类型为int的列 .Where(x => x.MessageType == MyEnum.Sms) 该代码表示: '无法应用类型为'int'和ClassLibrary.MyEnum的运算符'=' 如果将enum强制转换为int,则该命令有效: .Where(x => x.MessageType == (int) MyEnum.Sms) 我的枚举: public enum MyEnum { No
枚举
强制转换为int
MessageType
是my DB中类型为int
的列
.Where(x => x.MessageType == MyEnum.Sms)
该代码表示:
'无法应用类型为'int'和ClassLibrary.MyEnum的运算符'='
如果将enum
强制转换为int
,则该命令有效:
.Where(x => x.MessageType == (int) MyEnum.Sms)
我的枚举:
public enum MyEnum
{
None = 0,
Sms = 1,
Email = 2
}
枚举的基础类型可以是任何整数类型。如果您没有指定,它将默认为int32。强制转换是必要的,因为枚举没有整数的显式相等比较-仅适用于其他枚举。按现在的样子显式地强制转换被认为是最佳实践。见: 是否必须将具有选定值的枚举强制转换为int 不一定。您始终可以将int强制转换为enum
.Where(x => MyEnum.Sms == (MyEnum)x.MessageType)
或者,您可以将MessageType声明为MyEnum。那么就不会涉及INT了。问题是什么?强制转换为int。枚举不是int,它们的反序列化类型可能是int(也可以是短的、字节等)。在上的位置执行的可枚举类型是什么?如果
x.MyType
始终表示是MyEnum
,为什么它是int
类型?此外,看起来您正在使用LINQ-这是EF、LINQ到SQL、LINQ到对象吗?我相信问题是“有没有其他/更好的方法来比较与枚举的比较”,我不相信有is@Sayse,从int转换为enum。。。