题
C#中有没有办法:
-
获取具有属性的类的所有属性(相对于必须遍历所有属性,然后检查属性是否存在。
-
如果我想要所有公共,内部和受保护的属性但不是私有属性,我找不到这样做的方法。我只能这样做:
PropertyInfo [] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
醇>
有没有办法避免获得私人财产,但确实得到了其他所有财产。
解决方案
我不相信有办法做其中任何一种。
但是你需要反映出多少种类型?这真的是一个瓶颈吗?您是否能够缓存结果以避免每种类型多次执行此操作?
其他提示
关于缓存:如果您通过 TypeDescriptor.GetProperties
访问属性,那么您可以免费获得缓存。 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"
}
}
然后你的PropertyCache.Cache只有Foo等数据 - 有懒惰的人口。如果您愿意,也可以使用静态构造函数。
响应(2):如果你在有问题的类/程序集之外, internal
和 protected
与 private 代码>
如果您想要访问这些内容,您需要像已经完成的那样询问所有属性,并自行过滤列表。
不隶属于 StackOverflow