"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني استرداد قيم السمات ديناميكيًا من فئة في وقت التشغيل؟

كيف يمكنني استرداد قيم السمات ديناميكيًا من فئة في وقت التشغيل؟

نشر في 2025-02-07
تصفح:702

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

سمات البحث في وقت التشغيل

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

استخدم طريقة خاصة

تحديد طريقة شائعة تقبل المعلمات النوع:

public string GetDomainName()
]

داخل الطريقة:

  • استخدم typeof (t) .getCustomAttributes لاسترداد السمات المخصصة:

      var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;
  • في حالة وجود خاصية ، يتم إرجاع قيمتها:

      if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }
  • خلاف ذلك ، إرجاع فارغة:

      return null;
    ]

طريقة تمديد الأداة المساعدة

للتطبيق الأوسع ، قم بتعميم هذه الطريقة للتعامل مع أي سمة:

public static class AttributeExtensions
{
    public static TValue GetAttributeValue(
        this Type type, 
        Func valueSelector) 
        where TAttribute : Attribute
}
داخل طريقة التمديد:

  • استرداد الخصائص المخصصة:

      var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;
  • إذا كانت السمة موجودة ، فاستخدم ValuereSelector المقدمة

    لاستخراج القيمة المطلوبة: ]

    if (att! = null) { Return DateElector (ATT) ؛ }
      if (att != null)
      {
        return valueSelector(att);
      }
  • وإلا ، إرجاع القيمة الافتراضية لهذا النوع:
  • إرجاع الافتراضي (tvalue) ؛
      return default(TValue);
  • مثال الاستخدام

استرداد
  • اسم السلسلة = typeof (myClass) .getDomainName () ؛
استرداد أي قيمة سمة من
string name = typeof(MyClass).GetDomainName();
  • اسم السلسلة = typeof (myClass) .getAttributeValue ((DomainnameAttribute DNA) => dna.name) ؛
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3