Я следующий ENUM:Enum Описание в строку
[Flags]
public enum DataFiat {
[Description("Público")]
Public = 1,
[Description("Filiado")]
Listed = 2,
[Description("Cliente")]
Client = 4
} // DataFiat
И я создал расширение, чтобы получить атрибут Enum:
public static T GetAttribute<T>(this Enum value) where T : Attribute {
T attribute;
MemberInfo info = value.GetType().GetMember(value.ToString()).FirstOrDefault();
if (info != null) {
attribute = (T)info.GetCustomAttributes(typeof(T), false).FirstOrDefault();
return attribute;
}
return null;
}
Это работает для не Flags Перечисления ... Но когда я есть:
var x = DataFiat.Public | DataFiat.Listed;
var y = x.GetAttribute<Description>();
значение у равно нулю ...
Я хотел бы получить «Público, Filiado, Cliente» ... Как работает ToString().
Как изменить расширение, чтобы сделать эту работу?
Спасибо
[Перерыв флаги вниз в отдельные значения] (http://stackoverflow.com/questions/4171140/iterate-over-values-in-flags-enum), получить атрибут для каждого отдельного значения и построить строку из них всех. –
Но это не сработает, так как ваш метод расширения возвращает только одно значение, однако то, что вы хотите сделать, - это вернуть список значений. В противном случае метод расширения должен обладать знаниями о том, как объединить эти атрибуты. – peter
Это не будет очень удобно локализовать, если вы хотите, чтобы английские колонки использовали его. – Gusdor