Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 21 Octubre 2013, 11:03 am



Título: [C#] [VB.NET] Enums con valores duplicados
Publicado por: Eleкtro en 21 Octubre 2013, 11:03 am
A ver, tengo un pequeño lio mental con el método [Enum].Parse, en el cual, según nos cuenta el MSDN, se le puede pasar un parámetro de IgnoreCase:

Citar
Parse(Type, String, Boolean)

Bien, esto en un principio para mi no tiene lógica alguna, teniendo en cuenta que en VB.NET no se puede escribir una enumeración con nombres duplicados de esta manera:

Código
  1. Private Enum Test
  2.    A
  3.    a
  4. End Enum

Pero según he leido, en C# si que es totálmente válido ese tipo de Enums, y entonces esto ya comienza a tener algo de sentido.

El caso es que según me han comentado también sería posible compilar ese tipo de enumeraciones en VB.NET, pero no me han especificado de que manera se podría hacer,
Aunque yo no estoy nada interesado en crear una Enum con valores duplicados la verdad, pero si esto es así de cierto entonces podría significar que las Enums internas del Framework podrían contener nombres de valores "duplicados"?

...en VB.NET, supongamos que hemos escrito una función genérica para parsear un valor de una Enum:
Código
  1. Private Function Enum_Parser(Of T)(Value As Object) As T
  2.  
  3.    Try
  4.        Return [Enum].Parse(GetType(T), Value, True)
  5.  
  6.    Catch ex As ArgumentException
  7.        Throw New Exception("Value not found")
  8.  
  9.    Catch ex As Exception
  10.        Throw New Exception(String.Format("{0}: {1}}", ex.Message, ex.StackTrace))
  11.  
  12.    End Try
  13.  
  14. End Function

La pregunta es, ¿existe algún riesgo de que la función devuelva un falso positivo?.

O en otras palabras, ¿alguna de las Enums del Framework contiene valores que se diferencian en el StringCase pudiendo dar así un falso positivo?

También me atrevería a preguntar porque alguien sería tan estúpido de poner nombres duplicados en una Enum... pero bueno, imagino que habrá razones válidas y quizás no serán tan estúpidas como pienso.


Título: Re: [C#] [VB.NET] Enums con valores duplicados
Publicado por: Keyen Night en 9 Noviembre 2013, 18:30 pm
Por estrictas normas de globalización que sigue la plataforma .Net, las comparaciones internas de texto se realizan por comparación ordinal y respetando el uso mayúsculas y minúsculas. En VB.NET no se puedan repetir los nombres sin importar el case, es sólo debido a su sintaxis, y no tiene nada que ver con la plataforma como tal, mientras que en C# es posible nombrar 2 variables de la misma manera, si su case es diferente. Es literalmente imposible, que el parser de .Net obtenga un falso positivo, ya que es ambos casos (tanto en VB.NET como en C#), no puedes invocar 2 variables con el mismo nombre; es totalmente válido este enum por ejemplo:

Código
  1.        public enum ejemplo : int
  2.        {
  3.            azul,
  4.            AZUL,
  5.            AZUl
  6.        }

El único problema que tiene, es que como somos humanos, tenemos la necesidad de que todo se vea simétrico, para para la computadora esos son 3 valores que no tienen absolutamente nada que ver uno con el otro.


Título: Re: [C#] [VB.NET] Enums con valores duplicados
Publicado por: Eleкtro en 10 Noviembre 2013, 18:45 pm
@Keyen Night gracias

Cierro el tema.