我有一个房产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)
?
看到这里.这个想法是使用表达式树.
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)
| 归档时间: |
|
| 查看次数: |
1426 次 |
| 最近记录: |