Podobnie jak w przykładzie Shauna Bowe'a, możesz to również zrobić w C# 3 z metodą rozszerzenia dla enum (nie wymyśliłem i nie mogę, na moje życie, pamiętam, gdzie ja to zrobiłem).
utworzyć atrybut:
public class DisplayTextAttribute : Attribute {
public DisplayTextAttribute(String text) {
Text = text;
}
public string Text { get; set; }
}
Załóż rozszerzenie:
public static class EnumHelpers {
public static string GetDisplayText(this Enum enumValue) {
var type = enumValue.GetType();
MemberInfo[] memberInfo = type.GetMember(enumValue.ToString());
if (memberInfo == null || memberInfo.Length == 0)
return enumValue.ToString();
object[] attributes = memberInfo[0].GetCustomAttributes(typeof(DisplayTextAttribute), false);
if (attributes == null || attributes.Length == 0)
return enumValue.ToString();
return ((DisplayTextAttribute)attributes[0]).Text;
}
}
Znalazłem to być rozwiązanie bardzo schludny. W swojej wyliczenia dodać następujące:
enum FilterType{
Rigid,
[DisplayText("Soft/Glow")]
SoftGlow,
Ghost
}
Następnie można przejść FilterType.GetDisplayText()
które odciągnąć ciąg dla Unattributed teksty stałe i displayText dla tych z atrybutami.
Przyjemne podejście. Możesz nawet mieć to jako metodę rozszerzenia dla wszystkich wyliczeń. –
Dzięki .. Mam kilka statycznych metod, których używam w moim bieżącym projekcie, aby poradzić sobie z takimi wyliczeniami.Nigdy nie myślałem o używaniu metody rozszerzenia. Muszę spróbować. –
Dobrą praktyką jest serializowanie tego poprzez ... definiowanie jeszcze jednego atrybutu .... w [System.Xml.Serialization.XmlEnum ("Rigid")] ... [Opis (" Sztywne ")] Sztywne, ... itd. –