Mam trudności z pracą z niektórymi wyliczeniami starszymi, które mają wiele wartości zerowych. Ilekroć wywołuję ToString
na jednej z niezerowych wartości, uwzględniane są wszystkie oprócz pierwszej wartości zera.Uzyskiwanie nazw elementów z tabel wyliczeniowych z wieloma wartościami zerowymi
Czy istnieje sposób na wyodrębnienie niezerowej nazwy wartości bez odwoływania się do manipulacji ciągiem lub odbicia?
//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
}
Edit
Rozumiem, że posiadanie wielu elementów z tej samej wartości nie jest jednak enum w pytaniu jest zdefiniowana w zespole starszego typu, że nie mogę zmienić zalecane. W rzeczywistości istnieje 12 teksty stałe publiczne mscorlib v4, które rozkładają się do tego zalecenia, jak ustala się według następującego prostej kwerendy 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();
To powszechna praktyka, aby mieć tylko jedną wartość zerową. W rzeczywistości powszechną praktyką jest nie powtarzanie żadnych wartości. Jest to enum i nieodłączne niebezpieczeństwo polega na wartości "wsparcia". –
Czy możesz pokazać kod, w jaki sposób używane są te flagi? Czy są używane jako maski bitowe? – Maggie
Ponieważ jest to oczywiście niepożądane zachowanie, możesz złożyć raport o błędzie: http://connect.microsoft.com. – Heinzi