Несколько способов решить проблему:
Просто замените Environment.Exit на return. Компилятор знает, что return завершает метод, но не знает, что Environment.Exit делает.
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;
}
Конечно, вы можете обойтись без этого, потому что вы используете 0 в качестве кода выхода во всех случаях. Действительно, вы должны вернуть int вместо использования Environment.Exit. Для этого конкретного случая это будет мой предпочтительный метод
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;
}
}
Инициализируйте очередь как ноль, что на самом деле является трюком с компилятором, который говорит: «Я выясню свои собственные неинициализированные переменные, большое спасибо». Это полезный трюк, но мне не нравится в этом случае - у вас слишком много веток, чтобы легко проверить, что вы делаете это правильно. Если бы вы действительно хотели сделать это таким образом, что-то вроде этого было бы яснее:
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());
}
Добавить оператор возврата после Environment.Exit. Опять же, это скорее трюк с компилятором, но немного более правдоподобный IMO, поскольку он также добавляет семантику для людей (хотя и удержит вас от этого хваленого 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());
}