2

C#中有没有办法:

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

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

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

有没有办法避免获得私有财产但得到其他一切。

4

4 回答 4

2

关于缓存:如果您通过TypeDescriptor.GetPropertiesthen 访问属性,您将免费获得缓存。该类TypeDescriptor还有一些其他很好的实用方法,用于像这样的反射情况。它只对public属性进行操作(没有protectedinternal成员,也没有字段)。

于 2008-10-31T19:21:50.240 回答
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"
    }
}

Then your PropertyCache.Cache has the data just for Foo, etc - with lazy population. You could also use a static constructor if you prefer.

于 2008-10-31T21:40:13.720 回答
1

我不相信有办法做到这些。

但是,您必须反思多少种类型?真的是瓶颈吗?您是否能够缓存结果以避免每种类型多次执行此操作?

于 2008-10-31T15:57:20.137 回答
1

回应(2):如果您不在所讨论的班级/程序集中,internal并且protectedprivate.

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

于 2008-10-31T19:19:27.310 回答