GetCustomAttribute gibt null zurück
Kann jemand mir erklären, warum Value.GetType().GetCustomAttribute
zurück null
? Ich habe zehn verschiedene tutorials, wie man die Attribute eines enumerierten Typs Mitglied. Egal, welche GetCustomAttribute*
Methode, die ich verwenden, ich bekomme keine benutzerdefinierten Attribute zurückgegeben.
using System;
using System.ComponentModel;
using System.Reflection;
public enum Foo
{
[Bar(Name = "Bar")]
Baz,
}
[AttributeUsage(AttributeTargets.Field)]
public class BarAttribute : Attribute
{
public string Name;
}
public static class FooExtensions
{
public static string Name(this Foo Value)
{
return Value.GetType().GetCustomAttribute<BarAttribute>(true).Name;
}
}
- Vielleicht sollte ich meine Frage umformulieren. Ich verstehe, warum
NullReferenceException
geworfen wird. Was ich nicht verstehe, ist, warumValue.GetType().GetCustomAttribute
zurücknull
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil die Attributs, das Sie abrufen möchten, wurde nicht angewendet, um den Typ; es wurde auf das Feld angewendet.
Daher zu fordern, anstatt GetCustomAttributes auf das Typ-Objekt, müssen Sie rufen Sie es auf das FieldInfo-Objekt. In anderen Worten, Sie würde tun müssen, etwas mehr wie folgt:
phoog die Erklärung des Problems ist korrekt. Wenn Sie wollen, ein Beispiel, wie das abrufen des Attributs auf ein enum-Wert, check-out diese Antwort.
Ihr Attribut ist auf der Feldebene, in der Erwägung, dass
Value.GetType().GetCustomAttribute<BarAttribute>(true).Name
zurückkehren würde-Attribut angewendet, um enum FooLandete ich umschreiben es wie folgt:
Ich denke, Sie müssen umschreiben, FooExtension wie diese: