¿Por qué C # 3 permite la conversión implícita de cero literal (0) a cualquier Enum?

C # 3 (Visual Studio 2008) introdujo un cambio importante en el lenguaje (http://msdn.microsoft.com/en-us/library/cc713578.aspx, vea 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 una literal? O siete? ¿Por qué es cero especial? Y hace algunas elecciones de resolución de sobrecarga muy poco intuitivas. Por ejemplo.

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 de ruptura intencionalmente introducido al lenguaje. ¿Algunas ideas?

Respuestas a la pregunta(5)

Su respuesta a la pregunta