У меня есть перечисление с пользовательским атрибутом маркировки пунктов:Изучения перечисления атрибутов из дерева выражения
enum MyColourEnum {
[RenderAs("'#ff0000'")]
Red,
[RenderAs("'#00ff00'")]
Green
}
Затем я создаю дерево выражения, которое использует перечисление:
Expression<Func<Environment,bool>> expr = _ => _.Colour == MyColourEnum.Red;
Я тогда синтаксический анализ дерева выражений и перевести его в строковое представление выражения. Результирующая строка, что я хочу это:
"environment.colour == '#ff0000'"
У меня есть проблема в том, что значение перечисления получает превратился в константу в лямбда, поэтому при взгляде на дерево выражения, он видит постоянное значение 0
вместо выражение, читающее красный элемент перечисления.
Я хочу использовать настраиваемый атрибут, чтобы идентифицировать перечисление как особый случай, и заменить его на значение, прикрепленное к атрибуту, но я не могу, потому что все, что я вижу, - это значение константы 0
.
Как я могу получить перечисление, используемое для создания константы в дереве выражений?
Если вы не можете, то как же я могу сделать что-то подобное?
BTW, конвенция должна вызвать параметр лямбда '_', если вы * не * собираетесь использовать его. – svick
@svick: это документировано где угодно? – BG100
Не задокументировано, так как я считаю, что это не официальное соглашение, но вы можете посмотреть, например, http://stackoverflow.com/q/2778362/41071. – svick