Un par de diferentes maneras de resolver el problema:
basta con sustituir Environment.Exit con retorno. El compilador sabe que la devolución finaliza el método, pero no sabe que Environment.Exit lo hace.
static void Main(string[] args) {
if(args.Length != 0) {
if(Byte.TryParse(args[0], out maxSize))
queue = new Queue(){MaxSize = maxSize};
else
return;
} else {
return;
}
Por supuesto, realmente solo puede salirse con la suya porque está usando 0 como código de salida en todos los casos. Realmente, deberías devolver un int en lugar de usar Environment.Exit. Para este caso particular, este sería mi método preferido
static int Main(string[] args) {
if(args.Length != 0) {
if(Byte.TryParse(args[0], out maxSize))
queue = new Queue(){MaxSize = maxSize};
else
return 1;
} else {
return 2;
}
}
Inicializar cola para nulo, lo que en realidad es sólo un truco compilador que dice: "Voy a entender mis propias variables sin inicializar, muchas gracias". Es un truco útil, pero no me gusta en este caso: tienes demasiadas ramas para verificar fácilmente que lo estás haciendo correctamente. Si realmente quería hacerlo de esta manera, algo como esto sería más claro:
static void Main(string[] args) {
Byte maxSize;
Queue queue = null;
if(args.Length == 0 || !Byte.TryParse(args[0], out maxSize)) {
Environment.Exit(0);
}
queue = new Queue(){MaxSize = maxSize};
for(Byte j = 0; j < queue.MaxSize; j++)
queue.Insert(j);
for(Byte j = 0; j < queue.MaxSize; j++)
Console.WriteLine(queue.Remove());
}
Añadir una instrucción de retorno después de Environment.Exit. Una vez más, esto es más de un truco compilador - pero es un poco más de fiar OMI, ya que añade la semántica para los seres humanos también (aunque él se puede mantener de esa cobertura cacareado código 100%)
static void Main(String[] args) {
if(args.Length != 0) {
if(Byte.TryParse(args[0], out maxSize)) {
queue = new Queue(){MaxSize = maxSize};
} else {
Environment.Exit(0);
return;
}
} else {
Environment.Exit(0);
return;
}
for(Byte j = 0; j < queue.MaxSize; j++)
queue.Insert(j);
for(Byte j = 0; j < queue.MaxSize; j++)
Console.WriteLine(queue.Remove());
}
No puedo darle ninguna indicación, pero espero que pueda obtener un control sobre esta. – wprl