dưới đây đang hoạt động tốt:Tại sao không biên dịch C# có thể làm theo tất cả các đường dẫn mã thông qua một câu lệnh switch
ListControl lstMyControl;
if (SomeVariable == SomeEnum.Value1)
{
lstMyControl = new DropDownList();
}
else
{
lstMyControl = new RadioButtonList();
}
lstMyControl.CssClass = "SomeClass";
Trong khi các mã dưới đây sẽ không biên dịch:
ListControl lstMyControl;
switch (SomeVariable)
{
case SomeEnum.Value1:
lstMyControl = new DropDownList();
break;
case default:
lstMyControl = new RadioButtonList();
break;
}
lstMyControl.CssClass = "SomeClass";
Trong ví dụ thứ hai trình biên dịch nói rằng tôi đang cố gắng thiết lập một thuộc tính trên một biến chưa được khởi tạo. Trong cả hai trường hợp, lstMyControl phải được khởi tạo, nhưng compilr dường như không thể theo các đường dẫn mã đó thông qua câu lệnh switch để thấy điều đó. Trong ví dụ đơn giản ở trên tôi sẽ chỉ sử dụng nếu/else. Nhưng có một vài lần khi tôi muốn làm một cái gì đó như thế này với 10 lớp khác nhau mà tất cả kế thừa từ cùng một lớp cơ sở và có 10 câu lệnh if/elseif gây phiền nhiễu khi một câu lệnh switch là thứ tôi nên sử dụng.
Mong chờ câu trả lời ở đó ... Java sẽ không bị cắn theo cách đó ... Và tôi đã mong đợi C# cũng sẽ không. – Romain
if (SomeVariable = SomeEnum.Value1) <- Bạn chắc chắn đây không phải là một sự so sánh thay thế? if (SomeVariable == SomeEnum.Value1) –
Tôi thấy rằng trong ví dụ thứ hai của bạn (như được viết), trình biên dịch thực sự nói 'Lỗi cú pháp, '(' dự kiến' trên dòng nơi bạn có' trường hợp mặc định: '. 'default:' và presto, mọi thứ hoạt động – AakashM