其他分享
首页 > 其他分享> > 表达式树库和枚举之间的关系

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

作者:互联网

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

标签:enums,c,net,expression-trees
来源: https://codeday.me/bug/20191029/1958799.html