.net – Linq表达式:没有为类型’MyEnum’和’System.Enum’定
我将一些数据从WinGrid转换为表达式,以便将一些输出过滤到用户.
我有一个初始集合(MyObjectType),我应用了一些动态过滤器,我获得了一个过滤集合. 我有一个枚举的问题 – MyObjectType的属性. 枚举是标准枚举 Public Enum MyEnum A B C End Enum 这是我获取表达式的方式: Dim constantExpression As ConstantExpression If TypeOf Value Is [Enum] Then constantExpression = Expression.Constant(Value,GetType([Enum])) Else constantExpression = Expression.Constant(Value,Value.GetType()) End If ... Dim expr As Expression = Nothing Dim objectPropertyParam = Expression.Property(objectParam,objectPropertyName) Select Case Me.Operation Case ComparisonOperator.Contains,ComparisonOperator.NotContains ... Case ComparisonOperator.NotEqual ... Case ComparisonOperator.Equal ' THE EXCEPTION IS HERE --------------------------------------- expr = Expression.Equal(objectPropertyParam,constantExpression) Case ComparisonOperator.GreatherThanOrEqual expr = Expression.GreaterThanOrEqual(objectPropertyParam,constantExpression) Case ComparisonOperator.LessThanOrEqual expr = Expression.LessThanOrEqual(objectPropertyParam,constantExpression) End Select 然后发生以下异常:
PS. 我观察到如果我这样做 expr = Expression.Equal(objectPropertyParam,Expression.Convert(constantExpression,GetType(MyEnum))) 这个Works,但是我想不要像这样规范每种类型的枚举,因为它是一个通用函数!? 解决方法
您遇到的问题是Object.Equals和MyEnum.Equals之间的区别.而不是使用Expression.Equal使用Expression.Call来调用常量的Equals方法.
或者,如果这总是使用枚举完成,那么您可以安全地将它们全部转换为整数(或者无论最大的支持类型是什么).然后你不必硬编码转换为特定的枚举 – 它将适用于任何基于整数的枚举.如果它用于枚举之外的东西,那么使用Expression.Call是最好的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c – 在赋值后是否有更好的方法将变量强制转换为’const’?
- flex 制作图片淡入淡出
- react-native 之"Cannot update during an exitsting s
- WINCE6.0+SLC NAND FLASH创建多个分区
- sqlite3 – SQLite rowid的有效范围?
- VB.net 将form控制在右下角
- Swift中利用AppDelegate实现调用指定ViewController中的函数
- ReactJS学习系列课程(React 性能优化及immutable使用)
- c# – 使用可能是字符串或int的字段反序列化JSON对象的最佳
- c# – 在非英语Windows下转换小数