Мне трудно работать с некоторыми устаревшими перечислениями, которые имеют несколько нулевых значений.Всякий раз, когда я вызываю ToString
для одного из ненулевых значений, включаются все, кроме первого нулевого значения.
Есть ли способ изолировать имя ненулевого значения, не прибегая к манипуляции или отражению строки?
//all of the following output "Nada, Zilch, One"
Console.WriteLine(TestEnum.One);
Console.WriteLine(Convert.ToString(TestEnum.One));
Console.WriteLine(TypeDescriptor.GetConverter(typeof(TestEnum))
.ConvertToString(TestEnum.One));
[Flags]
enum TestEnum
{
Zero = 0,
Nada = 0,
Zilch = 0,
One = 1
}
Редактировать
Я понимаю, что использование нескольких элементов с одинаковым значением не рекомендуется, однако рассматриваемое перечисление определено в устаревшей сборке, которую я могу 'т изменить.На самом деле в mscorlib v4 существует 12 открытых перечислений, которые нарушают эту рекомендацию, что определяется следующим простым запросом LINQ:
var types = typeof (void).Assembly.GetTypes()
.Where(type => type.IsEnum &&
type.IsPublic &&
Enum.GetValues(type).Cast<object>()
.GroupBy(value => value)
.Any(grp => grp.Count() > 1))
.ToList();