C#中有没有办法:
获取具有属性的类的所有属性(而不是必须遍历所有属性然后检查属性是否存在。
如果我想要所有公共、内部和受保护的属性,但不想要私有属性,我找不到这样做的方法。我只能这样做:
PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
有没有办法避免获得私有财产但得到其他一切。
C#中有没有办法:
获取具有属性的类的所有属性(而不是必须遍历所有属性然后检查属性是否存在。
如果我想要所有公共、内部和受保护的属性,但不想要私有属性,我找不到这样做的方法。我只能这样做:
PropertyInfo[] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
有没有办法避免获得私有财产但得到其他一切。
关于缓存:如果您通过TypeDescriptor.GetProperties
then 访问属性,您将免费获得缓存。该类TypeDescriptor
还有一些其他很好的实用方法,用于像这样的反射情况。它只对public
属性进行操作(没有protected
或internal
成员,也没有字段)。
没有真正的方法可以更快地做到这一点- 但你可以做的是通过缓存数据来减少它的频率。通用实用程序类可能是一种方便的方法,例如:
static class PropertyCache<T>
{
private static SomeCacheType cache;
public static SomeCacheType Cache
{
get
{
if (cache == null) Build();
return cache;
}
}
static void Build()
{
/// populate "cache"
}
}
Then your PropertyCache.Cache has the data just for Foo, etc - with lazy population. You could also use a static constructor if you prefer.
我不相信有办法做到这些。
但是,您必须反思多少种类型?真的是瓶颈吗?您是否能够缓存结果以避免每种类型多次执行此操作?
回应(2):如果您不在所讨论的班级/程序集中,internal
并且protected
与private
.
如果您想访问这些,您需要询问所有属性,就像您已经完成的那样,并自己过滤列表。