如何使这个答案适应非一般类型的课程?

时间:2013-02-05 19:02:18

标签: c# .net reflection properties lambda

我想将this solution改编为我现有的实用程序类 - 只需GetProperty方法。事实是,我的实用程序类不是一般类型的(即类声明没有像<T>这样的PropertyHelper参数),我暂时不能添加一个。

换句话说,我只希望GetProperty方法是一般类型的,而不是整个类。

那么我需要做哪些修改才能使该方法有效?我尝试将T添加到该方法的泛型类型列表中:

public static PropertyInfo GetProperty<T, TValue>(Expression<Func<T, TValue>> selector)

但是当我尝试执行以下操作时,它会给我带来错误:

PropertyInfo prop = MyUtilClass.GetProperty<Foo>(x => x.Bar);

显然,这是因为GetProperty期望TTValue ......

我只是想像上面那样打电话。怎么样?

1 个答案:

答案 0 :(得分:3)

我可能不在此基础上,但似乎你想要代码:

PropertyInfo prop = MyUtilClass.GetProperty<Foo>(x => x.Bar);

工作(假设您正在尝试获取有关“x.Bar”的属性信息),您只需将您的函数定义为:

public static PropertyInfo GetProperty<T>(Expression<Func<T, Object>> selector)

然后从您的函数中读取成员的名称,如

MemberExpression member = (MemberExpression)selector.Body;
String propertyName = member.Member.Name;
PropertyInfo info = typeof(T).GetProperty(propertyName, BindingFlags.Public 
            |  BindingFlags.Instance)
return info;

就像我说的那样,我可能会偏离基础,但这就是你想要做的事情。