से विशेषता प्राप्त करें मैंने एक ऐसी समस्या में भाग लिया है जो आम तौर पर एक ही समस्या के लिए उपलब्ध समाधानों द्वारा हल नहीं किया जाता है।गतिशील रूप से जेनरेट की गई कक्षा
पर विचार करें:
मैं गतिशील रूप से उत्पन्न वर्गों का एक सेट है, एक ज्ञात आधार वर्ग से इनहेरिट (यह BaseClass
फोन की सुविधा देता है)। इन गतिशील रूप से जेनरेट किए गए वर्गों ने संबंधित विशेषताओं के साथ Properties
गतिशील रूप से उत्पन्न किया है।
गुण हालांकि गतिशील रूप से उत्पन्न नहीं, एक कस्टम वर्ग के भी हैं:
List<PropertyInfo> result = target.GetType()
.GetProperties()
.Where(
p =>
p.GetCustomAttributes(typeof(TypeAttribute), true)
//.Where(ca => ((TypeAttribute)ca).)
.Any()
)
.ToList();
जहां:
[AttributeUsage(AttributeTargets.Property)]
class TypeAttribute: Attribute
{
private Type _type;
public Type Type
{
get { return _type; }
}
public TypeAttribute(Type t)
{
_type = t;
}
}
तो मैं करने के लिए, निश्चित रूप से क्रम, इस सौंपा विशेषता के मान लाने चाहते हैं target
BaseClass
का उप-वर्ग है। सूची result
हालांकि खाली है, और यह मुझे परेशान करता है।
मैं विशेषता
PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName,
PropertyAttributes.HasDefault, propertyType, null);
ConstructorInfo classCtorInfo = typeof(TypeAttribute).
GetConstructor(new Type[] { typeof(Type) });
CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(
classCtorInfo, new object[] { getType(dataType) });
propertyBuilder.SetCustomAttribute(myCABuilder);
का उपयोग कर जहां dataType
प्रकार विशेषता में स्टोर करने के लिए है और tb
वर्ग के लिए TypeBuilder
है जोड़ें।
यदि मैं संपत्ति पर getCustomAttributes()
करता हूं, तो मुझे उम्मीद है कि मैं जिसकी तलाश कर रहा हूं उसे छोड़कर अपेक्षित विशेषताओं को प्राप्त करें। लेकिन अगर मैं getCustomAttributesData()
करता हूं तो मैं उन सभी को प्राप्त करता हूं, लेकिन जिसकी मैं तलाश कर रहा हूं वह CustomAttributeData
है और TypeAttribute
पर जाति योग्य नहीं है (यदि मैं वीएस डीबगर में उदाहरण की जांच करता हूं तो मैं देख सकता हूं कि निहित जानकारी TypeAttribute
के लिए है)। मुझे लगता है कि यह समस्या का एक लक्षण है, लेकिन मुझे कारण नहीं मिल रहा है - समाधान बहुत कम है।
क्या कोई मुझे बता सकता है कि result
सूची खाली क्यों है?
ओह, यह मजेदार है; इसमें मेरे लिए टेस्ट रिग स्थापित करने में कुछ मिनट लगेंगे ... मुझे उम्मीद है कि कोई ऐसा कुछ स्पष्ट करेगा जब मैं ऐसा करता हूं! –