C#中有没有办法:

  1. 获取具有属性的类的所有属性(相对于必须遍历所有属性,然后检查属性是否存在。

  2. 如果我想要所有公共,内部和受保护的属性但不是私有属性,我找不到这样做的方法。我只能这样做:

    PropertyInfo [] props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)

  3. 有没有办法避免获得私人财产,但确实得到了其他所有财产。

有帮助吗?

解决方案

我不相信有办法做其中任何一种。

但是你需要反映出多少种类型?这真的是一个瓶颈吗?您是否能够缓存结果以避免每种类型多次执行此操作?

其他提示

关于缓存:如果您通过 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

如果您想要访问这些内容,您需要像已经完成的那样询问所有属性,并自行过滤列表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top