2014-09-19 19 views
6

Tôi có một câu lệnh chuyển đổi sử dụng một chuỗi gồm 3 chữ cái. Đối với nhiều trường hợp (nhưng không phải tất cả) tôi chỉ muốn quan tâm đến bản thân mình với 2 chữ cái đầu tiên.Tôi làm cách nào để sử dụng ký tự đại diện trong câu lệnh chuyển đổi?

Ví dụ, tôi muốn tất cả các mã bắt đầu bằng "FF" để được xử lý giống nhau:

switch(code) 
{ 
    case "FF(?)": 
     // Handle it 
     break; 
    default: 
     break; 
} 

tôi có thể làm gì ở đây? Tôi có thể sử dụng ký tự đại diện không? Tôi có phải xem xét mọi mã FF không?

Vì lý do rõ ràng, tôi không muốn có mã như thế này, có thể phát triển thực sự lớn:

case "FFA": 
case "FFB": 
case "FFD": 
    // Handle it 

Trả lời

5

Do 2 ký tự đầu tiên của bạn tại switch, không phải ở case.

Sử dụng trường hợp default để sau đó quay lại ba trường hợp chữ cái. Nó không phải là sạch nhất, nhưng nó sẽ làm việc. Đôi khi các câu hỏi if là cách để đi nếu các công tắc không cắt.

switch(code.Substring(0, 2)) 
{ 
    case "FF": 
     ... 
    default: 
     switch(code) 
     { 
      case "ABC": 
       .... 
     } 
} 
+2

Nhưng đôi khi tôi sẽ cần phải xử lý tất cả 3 chữ cái. – AdamMc331

+1

Điều này không xử lý một số trường hợp - ông đã đề cập "(nhưng không phải tất cả)" trong văn bản ... –

+0

@ McAdam331 Đã sửa lỗi. –

1

Tuyên bố chuyển đổi trong C# không hỗ trợ điều này. Bạn sẽ cần phải sử dụng nếu/else thay vì:

if (code.StartsWith("FF")) 
{ 
    // Handle it 
} 
else if (code == "HFD") // etc 
{ 
    // Handle it 
} 
else 
{ 
    // default case 
} 
5

Sử dụng if then else cho các loại so sánh. Đặt các câu hỏi switchcase của bạn cho các trường hợp dễ nhận biết là các giá trị rời rạc.

+0

Mặc dù không có gì ngăn cản các giá trị không rời rạc (không phải là bạn ngụ ý như vậy), nó chắc chắn là dễ đọc hơn, dễ bảo trì và dễ hiểu hơn khi chúng bị rời rạc. –

2

chỉ cần sử dụng một nhà điều hành ternary trong câu lệnh switch

switch (code.StartsWith("FF")? code.substring(0,2): code) 
{ 
    case "FF": 

    case "FAS": 

    case "FAY" 

    // etc. 
} 

cho bội, làm điều này:

switch (new[] {"FF", "GG", "HH", "JJ"}.Contains(code.substring(0,2))? 
        code.substring(0,2): code) 
{ 
    case "FF": 
    case "GG": 
    case "HH": 
    case "JJ": 

    case "FAS": 

    case "FAY" 

    // etc. 
} 
+1

Điều đó sẽ hiệu quả nếu kiểm tra chỉ có hai chữ cái là "FF", nhưng nó sẽ trở nên khá xấu nếu bạn muốn kiểm tra nhiều trường hợp 2 chữ cái. –

+0

Có, nhưng tôi cho rằng nó vẫn sạch hơn nhiều lồng nhau nếu khác nếu các câu lệnh –

+0

Tôi cũng thích điều này rất nhiều. Tôi nghĩ tôi có thể làm ngược lại, vì 3 trường hợp thư sẽ hiếm hơn. Tôi có thể nói 'switch (code.Equals (" ABC ")? Code: code.chuỗi con (0,2) 'và nó sẽ không bị xáo trộn khủng khiếp. – AdamMc331

Các vấn đề liên quan