如何从其类型和名称创建枚举的表达式?

问题描述 投票:-1回答:2

很难找到我想做的事,this post是我能找到的最接近的。 This post不起作用,因为我不知道枚举的整数值,我只知道它的名称。给出以下代码:

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:未为类型'Foo'定义属性'Row'参数名称:propertyName

这很有意义,因为它是结构而不是对象。

因此,在枚举类型为Foo.Row且名称为字符串的情况下,我不确定如何构建表达式Foo。>>

很难找到我想做的事情,这篇帖子是我能找到的最近的帖子。由于我不知道枚举的整数值,我只知道它的名字,所以这篇文章将不起作用。给定...

c# enums expression-trees
2个回答
1
投票

枚举值是枚举类型的静态字段。如果只将枚举值的名称作为字符串,则第二个版本就是您要查找的版本。但是您也可以使用第一个版本执行Enum.Parse()。


0
投票

或多或少像这样:

© www.soinside.com 2019 - 2024. All rights reserved.