Nếu bạn biết rằng chiều dài của điều kiện bạn sẽ chăm sóc tất cả về sẽ có cùng độ dài sau đó bạn có thể:
switch(mystring.substring(0, Math.Min(3, mystring.Length))
{
case "abc":
//do something
break;
case "xyz":
//do something else
break;
default:
//do a different thing
break;
}
Các Math.Min(3, mystring.Length)
là có để cho một chuỗi dưới 3 ký tự sẽ không ném một ngoại lệ về hoạt động chuỗi con.
Có các phần mở rộng của kỹ thuật này để khớp với ví dụ: một loạt các chuỗi 2-char và một chuỗi các chuỗi 3 char, trong đó một số so sánh 2-char khớp với sau đó được theo sau bởi các so sánh 3-char. Trừ khi bạn có một số lượng rất lớn các chuỗi như vậy, nó nhanh chóng trở nên kém hiệu quả hơn so với chuỗi đơn giản nếu có khác cho cả mã chạy và người phải duy trì nó.
Chỉnh sửa: Đã thêm từ khi bạn hiện đã tuyên bố chúng sẽ có độ dài khác nhau. Bạn có thể làm mẫu mà tôi đã đề cập đến để kiểm tra các ký tự X đầu tiên và sau đó là ký tự Y tiếp theo và vân vân, nhưng trừ khi có một mẫu mà hầu hết các chuỗi đều có độ dài như nhau, điều này sẽ không hiệu quả và khủng khiếp để duy trì. của bi quan sớm).
Mẫu lệnh được đề cập trong câu trả lời khác, vì vậy tôi sẽ không cung cấp chi tiết về điều đó, cũng như khi bạn ánh xạ mẫu chuỗi thành ID, nhưng chúng là tùy chọn.
Tôi sẽ không thay đổi từ các chuỗi if-else để chỉ huy hoặc lập bản đồ mẫu để đạt được hiệu quả chuyển đổi đôi khi đã kết thúc nếu bạn mất nhiều hơn so với lệnh hoặc lấy mẫu ID. Tôi sẽ làm như vậy nếu nó làm cho mã rõ ràng hơn. Một chuỗi các if-else có thể hoạt động khá tốt, hoặc với các so sánh chuỗi hoặc với các biểu thức thông thường (sau này nếu bạn so sánh phức tạp hơn so với các tiền tố cho đến nay, có lẽ sẽ đơn giản hơn và nhanh hơn, tôi ' m đề cập đến reg-ex chỉ vì họ đôi khi làm việc tốt với các trường hợp chung hơn của loại hình này).
Nếu bạn tìm kiếm if-elses, hãy thử xem xét những trường hợp nào sẽ xảy ra thường xuyên nhất và thực hiện các kiểm tra đó trước các trường hợp ít phổ biến hơn (mặc dù tất nhiên nếu "bắt đầu với abcd" là trường hợp tìm kiếm nó sẽ phải được kiểm tra trước khi "bắt đầu với abc").
Nguồn
2010-10-04 08:43:33
có trường hợp chuyển đổi của bạn tất cả sẽ có cùng độ dài? ví dụ. ABC, XYZ – Paddy
@Paddy: Không, chúng có thể có độ dài khác nhau.Cảm ơn. – Amra