C#中有没有办法:
获取具有属性的类的所有属性(相对于必须遍历所有属性,然后检查属性是否存在。
如果我想要所有公共,内部和受保护的属性但不是私有属性,我找不到这样做的方法。我只能这样做:
PropertyInfo [] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
有没有办法避免获得私人财产,但确实得到了其他所有财产。
答案 0 :(得分:2)
关于缓存:如果您通过TypeDescriptor.GetProperties
访问属性,那么您将免费获得缓存。对于像这样的反射情况,TypeDescriptor
类有一些其他很好的实用方法。它仅在public
属性上运行(没有protected
或internal
成员,没有字段。
答案 1 :(得分:2)
实际上没有办法更快 - 但你可以做的是通过缓存数据来减少这种情况。通用实用程序类可以是一种方便的方法,例如:
static class PropertyCache<T>
{
private static SomeCacheType cache;
public static SomeCacheType Cache
{
get
{
if (cache == null) Build();
return cache;
}
}
static void Build()
{
/// populate "cache"
}
}
然后你的PropertyCache.Cache只有Foo等数据 - 有懒惰的人口。如果您愿意,也可以使用静态构造函数。
答案 2 :(得分:1)
我不相信有办法做其中任何一种。
但是你需要反映出多少种类型?这真的是一个瓶颈吗?您是否能够缓存结果以避免每种类型多次执行此操作?
答案 3 :(得分:1)
回答(2):如果您不在相关课程/装配范围之内,internal
和protected
与private
相同。
如果您想要访问这些内容,您需要像已经完成的那样询问所有属性,并自行过滤列表。