【发布时间】:2014-09-29 13:15:15
【问题描述】:
我有一个带有标记项目的自定义属性的枚举:
enum MyColourEnum {
[RenderAs("'#ff0000'")]
Red,
[RenderAs("'#00ff00'")]
Green
}
然后我创建一个使用枚举的表达式树:
Expression<Func<Environment,bool>> expr = _ => _.Colour == MyColourEnum.Red;
然后我解析表达式树并将其转换为表达式的字符串表示形式。我想要的结果字符串是:
"environment.colour == '#ff0000'"
我遇到的问题是枚举值在 lambda 中变成了一个常量,因此在查看表达式树时,它会看到常量值 0 而不是读取枚举的红色项的表达式。
我想使用自定义属性将枚举标识为特殊情况,并将其值替换为附加到属性的值,但我不能,因为我只能看到常量0 值。
如何获取用于在表达式树中创建常量的枚举?
如果你不能,那我还能怎么做类似的事情?
【问题讨论】:
-
顺便说一句,约定是调用 lambda 参数
_如果您不要使用它。 -
@svick:这在任何地方都有记录吗?
-
没有真正记录,因为我相信这不是官方约定,但你可以看看例如stackoverflow.com/q/2778362/41071。
标签: c# enums lambda expression-trees