我希望能够使用强类型语法检索类型的属性名称。我已经有了一个函数来获取实例的属性名:
public static string PropertyName<T, TReturn>(this T obj, Expression<Func<T, TReturn>> property) where T : class
{
MemberExpression body = (MemberExpression) property.Body;
if (body == null) throw new ArgumentException("The provided expression did not point to a property.");
return body.Member.Name;
}
它可以像这样调用:
Car car = new Car();
car.PropertyName(x => x.Wheels) //returns "Wheels"
我正在尝试创建另一个支持以下内容的函数:
Type t = Typeof(Car);
t.PropertyName(x => x.Wheels) //should return "Wheels"
或者只是(甚至更好!):
Car.PropertyName(x => x.Wheels)
我该怎么做呢?
发布于 2015-02-18 03:31:31
您可以重写您的方法以使用它,而无需创建实例:
var prop = ReflectionHelper.PropertyName<Car>(x => x.Wheels);
因为您不在内部使用obj
,因为您不需要它:
public static class ReflectionHelper
{
public static string PropertyName<T>(Expression<Func<T, object>> property) where T : class
{
MemberExpression body = (MemberExpression)property.Body;
return body.Member.Name;
}
}
请注意,返回类型不必是强类型的,它可以只是object
。
https://stackoverflow.com/questions/28569419
复制相似问题