.NET Framework 3.5 có phạm vi:
Có thể đếm được. Thay đổi từ MSDN
bạn có thể sử dụng nó với "chứa" và câu lệnh IF, vì giống như ai đó đã nói câu lệnh SWITCH sử dụng toán tử "==".
Dưới đây là một ví dụ:
int c = 2;
if(Enumerable.Range(0,10).Contains(c))
DoThing();
else if(Enumerable.Range(11,20).Contains(c))
DoAnotherThing();
Nhưng tôi nghĩ chúng ta có thể vui hơn: vì bạn sẽ không cần các giá trị trả về và hành động này không lấy tham số, bạn có thể dễ dàng sử dụng các hành động!
public static void MySwitchWithEnumerable(int switchcase, int startNumber, int endNumber, Action action)
{
if(Enumerable.Range(startNumber, endNumber).Contains(switchcase))
action();
}
Ví dụ cũ với phương thức mới này:
MySwitchWithEnumerable(c, 0, 10, DoThing);
MySwitchWithEnumerable(c, 10, 20, DoAnotherThing);
Vì bạn đang truyền hành động, không phải giá trị, bạn nên bỏ dấu ngoặc đơn, điều này rất quan trọng. Nếu bạn cần hàm với các đối số, chỉ cần thay đổi loại Action
thành Action<ParameterType>
. Nếu bạn cần giá trị trả về, sử dụng Func<ParameterType, ReturnType>
.
Trong C # 3.0, không có Ứng dụng một phần dễ dàng nào để đóng gói thực tế là tham số trường hợp giống nhau, nhưng bạn tạo một phương thức trợ giúp nhỏ (một chút dài dòng, tho).
public static void MySwitchWithEnumerable(int startNumber, int endNumber, Action action){
MySwitchWithEnumerable(3, startNumber, endNumber, action);
}
Dưới đây là một ví dụ về cách tuyên bố nhập khẩu chức năng mới IMHO mạnh mẽ và thanh lịch hơn so với mệnh lệnh cũ.