Một vài cách khác nhau để giải quyết sự cố:
Chỉ cần thay thế Environment.Exit bằng trả lại. Trình biên dịch biết rằng trả về kết thúc phương thức, nhưng không biết rằng Environment.Exit thực hiện.
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;
}
Tất nhiên, bạn thực sự có thể tránh được điều đó vì bạn đang sử dụng 0 làm mã thoát trong mọi trường hợp. Thực sự, bạn nên trả về một int thay vì sử dụng Environment.Exit. Đối với trường hợp cụ thể này, đây sẽ là phương pháp ưa thích của tôi
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;
}
}
Initialize hàng đợi để null, mà thực sự chỉ là một thủ thuật biên dịch nói rằng "Tôi sẽ tìm ra các biến chưa được khởi tạo của riêng tôi, cảm ơn bạn rất nhiều". Đó là một thủ thuật hữu ích, nhưng tôi không thích nó trong trường hợp này - bạn có quá nhiều nếu các chi nhánh dễ dàng kiểm tra xem bạn có đang thực hiện đúng không. Nếu bạn thực sự muốn làm theo cách này, một cái gì đó như thế này sẽ được rõ ràng hơn:
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());
}
Thêm một tuyên bố trở lại sau Environment.Exit. Một lần nữa, đây là chi tiết của một thủ thuật biên dịch - nhưng là hơi legit hơn IMO vì nó bổ sung thêm ngữ nghĩa đối với con người cũng như (mặc dù nó sẽ giữ cho bạn từ 100% bảo hiểm mã vaunted)
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());
}
Tôi không thể cung cấp cho bạn bất kỳ gợi ý nào, nhưng tôi hy vọng bạn có thể xử lý vấn đề này. – wprl