C#Reflection - 获取没有字符串的PropertyInfo

EBE*_*LLO 2 c# reflection

我有一个房产Myclass:

public class MyClass{    
    public string FirstName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

如何在没有字符串的情况下获得PropertyInfo(使用GetProperty("FirstName"))?

今天我用这个:

PropertyInfo propertyTitleNews = typeof(MyClass).GetProperty("FirstName");
Run Code Online (Sandbox Code Playgroud)

有没有这样的使用方法:

PropertyInfo propertyTitleNews = typeof(MyClass).GetProperty(MyClass.FirstName);
Run Code Online (Sandbox Code Playgroud)

Iva*_*lov 6

看到这里.这个想法是使用表达式树.

public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>> expression)
{
    MemberExpression body = (MemberExpression)expression.Body;
    return body.Member.Name;
}
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

var name = GetPropertyName<MyClass, string>(c => c.FirstName);
Run Code Online (Sandbox Code Playgroud)

如果不需要指定如此多的通用参数,那么更清洁的解决方案就是如此.并且可以通过将MyClass泛型参数移动到util类:

public static class TypeMember<T>
{
    public static string GetPropertyName<TReturn>(Expression<Func<T, TReturn>> expression)
    {
        MemberExpression body = (MemberExpression)expression.Body;
        return body.Member.Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用会更清洁:

var name = TypeMember<MyClass>.GetPropertyName(c => c.FirstName);
Run Code Online (Sandbox Code Playgroud)