[C#] किसी विधि का एक विशेषता का मूल्य पढ़ें


Answers

[MyAttribute("Hello World")]
public int MyMethod()
{
var myAttribute = GetType().GetMethod("MyMethod").GetCustomAttributes(true).OfType<MyAttribute>().FirstOrDefault();
}
Question

मुझे अपनी पद्धति के भीतर से अपने गुण के मूल्य को पढ़ने में सक्षम होना चाहिए, मैं यह कैसे कर सकता हूं?

[MyAttribute("Hello World")]
public void MyMethod()
{
    // Need to read the MyAttribute attribute and get its value
}



अगर आप डिफ़ॉल्ट विशेषता मान को किसी प्रॉपर्टी (मेरे उदाहरण में Name ) में बनाते हैं, तो आप एक स्थिर गुण सहायक सहायक विधि का उपयोग कर सकते हैं:

using System;
using System.Linq;

public class Helper
{
    public static TValue GetMethodAttributeValue<TAttribute, TValue>(Action action, Func<TAttribute, TValue> valueSelector) where TAttribute : Attribute
    {
        var methodInfo = action.Method;
        var attr = methodInfo.GetCustomAttributes(typeof(TAttribute), true).FirstOrDefault() as TAttribute;
        return attr != null ? valueSelector(attr) : default(TValue);
    }
}

उपयोग:

var name = Helper.GetMethodAttributeValue<MyAttribute, string>(MyMethod, x => x.Name);

मेरा समाधान इस आधार पर है कि डिफ़ॉल्ट मान विशेषता निर्माण पर सेट है, जैसे:

internal class MyAttribute : Attribute
{
    public string Name { get; set; }

    public MyAttribute(string name)
    {
        Name = name;
    }
}