在 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/