Několik různých způsobů, jak vyřešit problém:
Jen nahradit Environment.Exit s návratem. Kompilátor ví, že návrat konce této metody, ale neví, že Environment.Exit dělá.
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;
}
Samozřejmě, že můžete opravdu jen dostat pryč s tím, protože používáte 0 jako kód ukončení ve všech případech. Opravdu, měli byste se vrátit int namísto použití Environment.Exit. V tomto konkrétním případě by to být můj preferovaný způsob
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;
}
}
Inicializovat frontu na null, což je opravdu jen kompilátor trik, který říká, „budu vymyslet své vlastní neinicializované proměnné, děkuji moc.“ Je to užitečný trik, ale nemám rád, v tomto případě - máte příliš mnoho, pokud větve snadno zkontrolovat, zda to děláte správně. Pokud jste opravdu chtěli udělat to takhle, něco takového by bylo jasnější:
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());
}
Přidání příkazu return po Environment.Exit. Opět platí, že se jedná spíše o kompilátoru trik - ale je o něco víc důvěryhodně IMO, protože přidává sémantiku pro člověka stejně (i když vás nechám od té vychvalovaný 100% pokrytí kódu)
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());
}