Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Resolución de nombre de enumeración extraña en C#

Considere el siguiente código:

 using System; namespace Test { enum Foo { A = 1, B = 1, C = 1 } public static class Program { public static void Main() { Console.WriteLine("{0}, {1}, {2}", Foo.A, Foo.B, Foo.C); } } }

Sabiendo que las enumeraciones son solo números enteros debajo del capó, esperaba que fuera A, A, A o C, C, C Pero, sorprendentemente, ¡imprime B, B, B ! Este comportamiento parece ser coherente en .NET Framework, .NET Core 3.x y .NET 5.

¿Por qué elige B ?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No está definido según la documentación de Enum.GetName():

Si varios miembros de la enumeración tienen el mismo valor subyacente, el método GetName garantiza que devolverá el nombre de uno de esos miembros de la enumeración. Sin embargo, no garantiza que siempre devolverá el nombre del mismo miembro de la enumeración.

Así que puede hacer lo que quiera en este sentido.

En cuanto a por qué devuelve B en su ejemplo, podemos inspeccionar la implementación de GetEnumName() :

 public virtual string GetEnumName(object value) { if (value == null) throw new ArgumentNullException("value"); if (!IsEnum) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeEnum"), "enumType"); Contract.EndContractBlock(); Type valueType = value.GetType(); if (!(valueType.IsEnum || Type.IsIntegerType(valueType))) throw new ArgumentException(Environment.GetResourceString("Arg_MustBeEnumBaseTypeOrEnum"), "value"); Array values = GetEnumRawConstantValues(); int index = BinarySearch(values, value); if (index >= 0) { string[] names = GetEnumNames(); return names[index]; } return null; }

¡Ajá! Todo está explicado. Para hacer la búsqueda más rápida, usaron una búsqueda binaria. ¿Y cuál es el primer lugar que busca una búsqueda binaria al iniciar la búsqueda? Así es, comienza a la mitad de la lista. Y es por eso que está encontrando la B primero: después de ordenar la lista, la B está en el medio.

(Tenga en cuenta que la lista está ordenada por valor de enumeración, no por nombre de enumeración, por lo que para su caso, la lista ya está ordenada ya que todos los valores son iguales).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda