[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;
    }
}



Links