小编典典

使用Lambda表达式获取属性名称和类型

c#

我正在尝试编写一个函数,该函数将使用如下语法来提取属性的名称和类型:

private class SomeClass
{
    Public string Col1;
}

PropertyMapper<Somewhere> propertyMapper = new PropertyMapper<Somewhere>();
propertyMapper.MapProperty(x => x.Col1)

是否可以在不对该语法进行任何重大更改的情况下将属性传递给函数?

我想获取属性名称和属性类型。

因此,在下面的示例中,我想检索

Name = "Col1"Type = "System.String"

有人可以帮忙吗?


阅读 1156

收藏
2020-05-19

共1个答案

小编典典

这是一个使用表达式获取属性或字段名称以入门的示例:

public static MemberInfo GetMemberInfo<T, U>(Expression<Func<T, U>> expression)
{
    var member = expression.Body as MemberExpression;
    if (member != null)
        return member.Member;

    throw new ArgumentException("Expression is not a member access", "expression");
}

调用代码如下所示:

public class Program
{
    public string Name
    {
        get { return "My Program"; }
    }

    static void Main()
    {
        MemberInfo member = ReflectionUtility.GetMemberInfo((Program p) => p.Name);
        Console.WriteLine(member.Name);
    }
}

不过请注意:简单的陈述(Program p) => p.Name实际上涉及大量的工作(可能要花费可观的时间)。考虑缓存结果,而不是频繁调用该方法。

2020-05-19