Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否需要将具有选定值的枚举强制转换为int?_C#_Enums - Fatal编程技术网

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。。。