Ich habe ein paar der Antworten hier zusammengeführt, um eine etwas erweiterbare Lösung zu schaffen. Ich stelle sie nur zur Verfügung, falls sie in Zukunft für andere hilfreich sein sollte. Ursprünglicher Beitrag aquí .
using System;
using System.ComponentModel;
public static class EnumExtensions {
// This extension method is broken out so you can use a similar pattern with
// other MetaData elements in the future. This is your base method for each.
public static T GetAttribute<T>(this Enum value) where T : Attribute {
var type = value.GetType();
var memberInfo = type.GetMember(value.ToString());
var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false);
return attributes.Length > 0
? (T)attributes[0]
: null;
}
// This method creates a specific call to the above method, requesting the
// Description MetaData attribute.
public static string ToName(this Enum value) {
var attribute = value.GetAttribute<DescriptionAttribute>();
return attribute == null ? value.ToString() : attribute.Description;
}
}
Mit dieser Lösung wird ein Paar von Erweiterungsmethoden für Enum erstellt. Mit der ersten können Sie Reflection verwenden, um jedes mit Ihrem Wert verbundene Attribut abzurufen. Die zweite ruft speziell die DescriptionAttribute
und gibt seine Description
Wert.
Ein Beispiel ist die Verwendung der DescriptionAttribute
Attribut von System.ComponentModel
using System.ComponentModel;
public enum Days {
[Description("Sunday")]
Sun,
[Description("Monday")]
Mon,
[Description("Tuesday")]
Tue,
[Description("Wednesday")]
Wed,
[Description("Thursday")]
Thu,
[Description("Friday")]
Fri,
[Description("Saturday")]
Sat
}
Um die obige Erweiterungsmethode zu verwenden, müssten Sie nun einfach Folgendes aufrufen:
Console.WriteLine(Days.Mon.ToName());
ou
var day = Days.Mon;
Console.WriteLine(day.ToName());
0 Stimmen
Aus einer anderen Frage stackoverflow.com/questions/469287/
0 Stimmen
Mögliche Duplikate von Kennt jemand eine schnelle Möglichkeit, um benutzerdefinierte Attribute auf einen Enum-Wert zu erhalten?
3 Stimmen
Der für die Beschreibung erforderliche Namespace ist System.ComponentModel
0 Stimmen
Sie können auch einfach System.ComponentModel nicht verwenden und einfach Ihren eigenen Attributtyp verwenden; es gibt wirklich nichts Besonderes an
DescriptionAttribute
.0 Stimmen
Bitte sehen Sie sich diesen Link an: stackoverflow.com/a/58954215/5576498