1

想做一些非常简单的事情,那就是获取属性的属性。现在我知道如何通过 PropertyInfo 等执行此操作,但我知道我想要获取属性的属性,因此是否可以执行以下操作:

MyAttribute attr = (MyAttribute)customer.Forename;

理想情况下要避免反射。我能想到的唯一方法是执行如下 linq 语句:

PropertyInfo pi = typeof(Customer).GetProperties().Where(x => x.Name == "Forename").FirstOrDefault();
MyAttribute attri = (MyAttribute)Attribute.GetCustomAttribute(pi, typeof(MyAttribute));

不喜欢这样,因为我必须对属性名称进行字符串比较:(

考虑到我知道我想要获取属性的属性,我认为可能有更简单的方法?

4

1 回答 1

0

Kzu 写了一段代码来实现强类型反射。

在此处查看博客文章:http: //blogs.clariusconsulting.net/kzu/linq-beyond-queries-strong-typed-reflection/

您现在可以将其作为 NuGet 包(NETFx 反射器)获取:

http://nuget.org/packages/netfx-Reflector

// Void static method
MethodInfo cw = Reflect.GetMethod(() => Console.WriteLine);

// Instance void method
MethodInfo mi = Reflect<IView>.GetMethod(v => v.Show);

// Boolean returning instance method
MethodInfo pi = Reflect<IViewModel>.GetMethod<bool>(v => v.Save);
于 2013-07-19T10:51:26.723 回答