C# 3 (Visual Studio 2008) introdujo un cambio radical en el lenguaje (http://msdn.microsoft.com/en-us/library/cc713578.aspx, consulte el cambio 12) que permite que cualquier cero literal se convierta implícitamente en un Enum. Esto parece extraño de muchas maneras. ¿Alguien sabe por qué esto es parte de la especificación? ¿Por qué no uno literal? ¿O siete? ¿Por qué el cero es especial? Y toma algunas decisiones de resolución de sobrecarga poco intuitivas. Por ejemplo.¿Por qué C# 3 permite la conversión implícita del cero literal (0) a cualquier Enum?
function string F(object o) { return o.ToString(); }
function string F(DbType t) { return t.ToString(); }
int i = 0;
F((long)0) == "String" // would have been "0" in VS 2005
F(0) == "String"
F(i) == "0"
Muy confuso, y un cambio brusco introducido intencionalmente al idioma. ¿Algunas ideas?
Si va a hacer un cambio tan drástico en una pregunta (especialmente una que ya votó por las respuestas), sería mejor que los respondedores, los navegadores y usted creen una nueva pregunta. Ahora tendrá respuestas a dos preguntas diferentes, la primera de las cuales probablemente los navegadores casuales nunca verán en el historial de edición. – joshperry
y, como si fuera magia, ¡la pregunta ha sido editada nuevamente a su forma engañosa original! se debe tener en cuenta que la muestra no se rompe en VS 2008. Voy a hacer ese cambio y ver si se pega ... –