Creo que, entre otras cosas, se reduciría a la confusión masiva de lo que sería el primer valor. Considere:
[Flags]
public enum MyColor
{
Yellow,
Green,
Red,
Blue
}
public class SomeClass
{
public MyColor SomeColor; // Yellow or undefined by default?
}
Cuando una clase se instancia todos sus campos son normalmente solo ponen a cero (referencias se vuelven nulos y valores se convierten en cero). Pero si el primer valor fuera uno, entonces el compilador tendría que manejar las enumeraciones Flag de forma diferente a cualquier otra cosa.
Por lo tanto, teniendo en cuenta esto, y también el hecho de que es muy útil para poder poner a cero un campo de bits, se llega a la conclusión de que el primer campo en realidad debería lógicamente ser cero:
[Flags]
public enum MyColor
{
Black, //0
Yellow, //1
Green, //2
Red, //3
Blue //4
}
Pero Supongo que no mucha gente se daría cuenta de esto (sin los comentarios anteriores). Y materia más complicado surgiría también:
[Flags]
public enum MyColor
{
Black,
Red,
Green,
Blue,
Magenta = Red | Blue,
Yellow = Red | Green | Blue,
SomeOtherColor // now what would the value of this automatically be?
}
Probablemente mejor que explicarlo de forma explícita para evitar la confusión masiva! :-)
¿Cómo responde esto la pregunta? ... – SKG
Le ahorra la necesidad de calcular el siguiente valor disponible – Ofir
¿Qué es el pseudo inglés para 1 << 0? –