[C#] [VB.NET] Enums con valores duplicados

Iniciado por Eleкtro, 21 Octubre 2013, 11:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

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:

CitarParse(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 (vbnet) [Seleccionar]
Private Enum Test
   A
   a
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 (vbnet) [Seleccionar]

Private Function Enum_Parser(Of T)(Value As Object) As T

   Try
       Return [Enum].Parse(GetType(T), Value, True)

   Catch ex As ArgumentException
       Throw New Exception("Value not found")

   Catch ex As Exception
       Throw New Exception(String.Format("{0}: {1}}", ex.Message, ex.StackTrace))

   End Try

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.








Keyen Night

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 (C#) [Seleccionar]
        public enum ejemplo : int
        {
            azul,
            AZUL,
            AZUl
        }


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.
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...

Eleкtro