gpt4 book ai didi

c# - 如何使用按位运算符和枚举生成动态表达式?

转载 作者:太空狗 更新时间:2023-10-29 21:18:10 25 4
gpt4 key购买 nike

假设我有以下枚举。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com