作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有以下枚举。
[Flags] public enum Color { Red = 1, Blue = 2, Green = 4 }
现在,我想使用以下查询来查找红色衬衫。
Shirts.Where(x => (x.Color & Color.Red) != 0)
它工作得很好,但是当我尝试动态构建它时:
var color= Expression.Constant(Color.Red);
var property = Expression.Property(Expression.Parameter(typeof(Shirt)), "Color");
Expression.NotEqual(Expression.And(property, color), Expression.Constant(0));
我得到以下异常:
The binary operator And is not defined for the types 'MyEnums.Color' and 'MyEnums.Color'.
我正在使用 .NET 4.5
有什么想法吗?
最佳答案
尝试使用 Expression.Convert
将颜色和属性转换为基础类型第一:
var color= Expression.Constant(Color.Red);
var property = Expression.Property(Expression.Parameter(typeof(Shirt)), "Color");
var colorValue = Expression.Convert(color, Enum.GetUnderlyingType(typeof(Color)));
var propertyValue = Expression.Convert(property, Enum.GetUnderlyingType(typeof(Color)));
Expression.NotEqual(Expression.And(propertyValue, colorValue), Expression.Constant(0));
关于c# - 如何使用按位运算符和枚举生成动态表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660731/
我是一名优秀的程序员,十分优秀!