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

本文关键字:之间 关系 枚举 表达式 | 更新日期: 2023-09-27 18:16:16

在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);

抛出以下错误(类似于<=,>和>=):

没有定义二元操作符LessThan对于类型的Prog。SomeEnumType'和'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));

实际上,您可以将其转换为int(或您的enum基于的任何类型)来实现所需的结果