【发布时间】:2015-02-17 19:20:26
【问题描述】:
我希望能够使用强类型语法检索类型属性的名称。 我已经有了一个函数来获取实例的属性名称:
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)
我该怎么办?
【问题讨论】:
-
泛型用于编译时已知类型。
System.Type不能有类似的方法。想象一个案例:Type t = Type.GetType("Hi there"); t.PropertyName(x => ???); -
顺便说一句:在 Roslyn 或 C# 6 中,您只需使用
nameof()。 -
我的问题是,你为什么需要这样的结构?让这样的函数返回一个字符串值有什么用?
标签: c# .net reflection expression-trees