Tengo dificultades para trabajar con algunas enumeraciones heredadas que tienen varios valores cero. Cada vez que llamo al ToString
en uno de los valores distintos de cero, se incluyen todos menos el primer valor cero.Obtener nombres de elementos de enumeraciones con valores cero múltiples
¿Hay alguna manera de aislar el nombre de valor distinto de cero sin recurrir a la manipulación o reflexión de cadenas?
//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
}
Editar
entiendo que tiene múltiples elementos con el mismo valor, no se recomienda sin embargo, la enumeración en cuestión se define en un conjunto de legado que no puedo cambiar. De hecho, hay 12 enumeraciones públicas en v4 mscorlib que rompen esta recomendación, según lo determinado por la siguiente consulta LINQ sencilla:
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();
Es una práctica común que sólo tienen un único valor cero. De hecho, es una práctica común no tener ningún valor repetido. Es una enumeración y existe un peligro inherente que depende del valor de "respaldo". –
¿Puedes mostrar algo del código de cómo se usan estas banderas? ¿Se usan como máscaras de bits? – Maggie
Dado que esto es obviamente un comportamiento no deseado, es posible que desee presentar un informe de error sobre esto: http://connect.microsoft.com. – Heinzi