c# - 表达式树库和枚举之间的关系

标签 c# .net enums expression-trees

在 C# 中,我可以使用任何关系运算符成功比较枚举值,如下所示:

var res  = SomeEnumType.First < SomeEnumType.Second

在尝试使用表达式库完成相同操作时:

var arg1 = Expression.Constant(SomeEnumType.First);
var arg2 = Expression.Constant(SomeEnumType.Second);
var res  = Expression.LessThan(arg1, arg2);

抛出以下错误(类比于 <=、> 和 >=):

The binary operator LessThan is not defined for the types 'Prog.SomeEnumType' and 'Prog.SomeEnumType'.

修复它的正确方法是什么?

最佳答案

您必须将枚举值转换为枚举基础类型:

var arg1 = Expression.Constant(SomeEnumType.First);
var arg2 = Expression.Constant(SomeEnumType.Second);
var enumType = Enum.GetUnderlyingType(typeof (SomeEnumType));
var res = Expression.LessThan(Expression.Convert(arg1, enumType), Expression.Convert(arg2, enumType));

关于c# - 表达式树库和枚举之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25108100/

相关文章:

c# - xmlwriter 在一行中写入元素

c# - 图像处理 - 在不去除的情况下减少物体厚度

c# - 如何在 ASP.NET 中获取客户端日期和时间?

c# - 我可以在 XUnit 构造函数中自定义 Fixture 以与 Theory 和 AutoData 一起使用吗?

Swift switch case 语句可以有多个参数吗?

java - 具有抽象函数的 Java 枚举有哪些非抽象版本不能做的事情? (即是否存在技术差异,或者只是一种模式?)

c# - 如何在 MVC.net 网页中保留由 @Html.ListBoxFor 做出的选择中的所有值?

c# - 检查 Razor 中模型列表项的计数

c# - 使用带有损坏引用的 .net DLL

c++ - 编译时的枚举数序列