سؤال

هل هناك طريقة في C#:

  1. الحصول على جميع خصائص الفئة التي لديها سمات عليها (مقابل حلقة من خلال كل خصائص ثم ثم تحقق إذا كان موجود السمة.

  2. إذا كنت تريد جميع العامة الداخلية و حماية الممتلكات ولكن ليس الممتلكات الخاصة, لا أستطيع العثور على طريقة للقيام بذلك.أستطيع أن أفعل ذلك إلا:

    PropertyInfo[] الدعائم = نوع.GetProperties(BindingFlags.على سبيل المثال | BindingFlags.عام | BindingFlags.غير معلنة)

هل هناك طريقة لتجنب الحصول على الممتلكات الخاصة ولكن لا تحصل على كل شيء آخر.

هل كانت مفيدة؟

المحلول

أنا لا أعتقد أن هناك طريقة لفعل أي من هذه.

كيف أن العديد من أنواع لديك للتفكير أكثر من ذلك ؟ هل هو حقا عنق الزجاجة ؟ هل أنت قادرة على تخزين النتائج لتجنب الاضطرار إلى القيام بذلك أكثر من مرة واحدة لكل نوع ؟

نصائح أخرى

بخصوص التخزين المؤقت:إذا كان يمكنك الوصول إلى خصائص عبر 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.التخزين المؤقت البيانات فقط فو ، إلخ - مع كسول السكان.هل يمكن أيضا استخدام منشئ ثابت إذا كنت تفضل ذلك.

ردا على (2):إذا كنت خارج الصف/الجمعية في السؤال ، internal و protected هي نفس private.

إذا كنت ترغب في الوصول إلى هذه, سوف تحتاج إلى طلب جميع الخصائص, كما كنت قد فعلت بالفعل و مرشح قائمة نفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top