Wenn Sie den Standardattributwert in eine Eigenschaft speichern (Name
in meinem Beispiel) auf dem Bau, dann können Sie eine statische Attribut Hilfsmethode verwenden:
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);
}
}
Verbrauch:
var name = Helper.GetMethodAttributeValue<MyAttribute, string>(MyMethod, x => x.Name);
Mein Lösung basiert darauf, dass der Standardwert für die Attributkonstruktion wie folgt festgelegt wird:
internal class MyAttribute : Attribute
{
public string Name { get; set; }
public MyAttribute(string name)
{
Name = name;
}
}
Es gibt auch generische Version (Sie brauchen nicht Casting!) Dieser Methoden als Erweiterungen in neueren Versionen von .net implementiert (ich denke nach 4.0), so Besucher, überprüfen Sie die Antworten anders als die akzeptierte – Mafii