यह आप आप प्रतिबिंब का उपयोग करने के रूप में करने के लिए कोशिश कर रहे हैं कि क्या करना है एक सा गन्दा है:
public GPUShaderAttribute GetGPUShader(EffectType effectType)
{
MemberInfo memberInfo = typeof(EffectType).GetMember(effectType.ToString())
.FirstOrDefault();
if (memberInfo != null)
{
GPUShaderAttribute attribute = (GPUShaderAttribute)
memberInfo.GetCustomAttributes(typeof(GPUShaderAttribute), false)
.FirstOrDefault();
return attribute;
}
return null;
}
यह GPUShaderAttribute
कि EffectType
की enum मूल्य पर चिह्नित एक के लिए प्रासंगिक है का एक उदाहरण वापस आ जाएगी। आप EffectType
enum के एक विशिष्ट मूल्य पर कॉल करनी होगी:
GPUShaderAttribute attribute = GetGPUShader(EffectType.MyEffect);
एक बार जब आप विशेषता का उदाहरण है, तो आप विशिष्ट मानों इसे से बाहर है कि व्यक्ति enum मूल्यों पर चिह्नित कर रहे हैं मिल सकता है।
class DayAttribute : Attribute
{
public string Name { get; private set; }
public DayAttribute(string name)
{
this.Name = name;
}
}
Enum:
enum Days
{
[Day("Saturday")]
Sat,
[Day("Sunday")]
Sun,
[Day("Monday")]
Mon,
[Day("Tuesday")]
Tue,
[Day("Wednesday")]
Wed,
[Day("Thursday")]
Thu,
[Day("Friday")]
Fri
}
जेनेरिक विधि
public static T GetAttribute<T>(Enum enumValue) where T: Attribute
{
T attribute;
MemberInfo memberInfo = enumValue.GetType().GetMember(enumValue.ToString())
.FirstOrDefault();
if (memberInfo != null)
{
attribute = (T) memberInfo.GetCustomAttributes(typeof (T), false).FirstOrDefault();
return attribute;
}
return null;
}
की [क्या AttributeTarget मैं enum सदस्यों के लिए इस्तेमाल करना चाहिए?] (Http संभव डुप्लिकेट: // stackoverflow .com/प्रश्न/5032774/what-attributetarget-should-i-use-for-enum-members) –
नहीं यह अलग है। यहां मैं प्रतिबिंब का उपयोग करके एक enum सदस्य पर सेट कस्टम विशेषताओं को प्राप्त करने की कोशिश कर रहा हूं। –
संभावित डुप्लिकेट [एनम के मूल्य के गुण प्राप्त करना] (http://stackoverflow.com/questions/1799370/getting-attributes-of-enums-value) –