Мне было трудно найти то, что я пытаюсь сделать, и этот пост был самым близким, который я мог найти. Этот пост не будет работать, так как я не знаю целочисленное значение перечисления, я знаю только его имя.Учитывая следующий код:
public enum Foo
{
Row = 0,
Column = 20, // This is why the second post won't work, I only know the name "Column"
None = 30
}
public static class ExpressionGetter
{
public static Expression GetExpression(Type type, string name)
{
// Not sure what I should do here. I want an expression object for Foo.Row
}
}
void Main()
{
var expression = ExpressGetter.GetExpression(typeof(Foo), "Row");
}
Позже в моем приложении я создаю деревья выражений для генерации запросов LINQ и знаю тип enum
и имя enum
, и теперь я хочусоздайте Expression.Constant
этого или, если есть другой способ сделать это, я хотел бы знать, как.
В конце я хочу получить выражение, которое выглядит так:
Foo.Row
Я пробовал:
Expression.Property(null, enumType, name)
Но это не работает.Результат:
ArgumentException: свойство 'Row' не определено для типа 'Foo' Имя параметра: propertyName
, что имеет смысл, поскольку это структура, а не объект.
Так что я не уверен, как построить выражение Foo.Row
, учитывая тип перечисления Foo
и имя в виде строки.