Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

153
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!