Dlaczego C # 3 pozwala na niejawną konwersję dosłownego zera (0) na dowolne Enum?

C # 3 (Visual Studio 2008) wprowadził przełomową zmianę języka (http://msdn.microsoft.com/en-us/library/cc713578.aspx, zobacz zmianę 12), która pozwala, aby dowolne dosłowne zero zostało niejawnie przekonwertowane na Enum. Wydaje się to dziwne na wiele sposobów. Czy ktoś wie, dlaczego to jest częścią specyfikacji? Dlaczego nie dosłowny? Czy siedem? Dlaczego zero jest wyjątkowe? I to robi bardzo sprzeczne z intuicją wybory rozdzielczości. Na przykład.

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"

Bardzo mylące i celowo wprowadzona przełomowa zmiana języka. Jakieś pomysły?

questionAnswers(5)

yourAnswerToTheQuestion