EDIT: Trả lời mới được cung cấp. Tôi mới bắt đầu sử dụng C # khi tôi viết câu trả lời đầu tiên cho câu hỏi này và sau khi nhận ra, bây giờ tôi nhận ra rằng "giải pháp" của tôi là / ngây thơ và không hiệu quả.
Câu trả lời ban đầu của tôi: Tôi sẽ dùng phiên bản đơn giản hơn:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Một cách tốt hơn
Vì tôi chưa thấy giải pháp nào hiệu quả hơn (ít nhất là theo thử nghiệm của tôi), tôi sẽ thử lại lần nữa.
Cách mới và tốt hơn cũng hoạt động với các phạm vi tiêu cực :
// Returns true if x is in range [min..max], else false
bool inRange(int x, int min=1, int max=100) => ((x - max)*(x - min) <= 0);
Điều này có thể được sử dụng với cả phạm vi tích cực và tiêu cực và mặc định cho một phạm vi
1..100 (đã bao gồm) và sử dụng x
làm số để kiểm tra theo sau là một phạm vi tùy chọn được xác định bởi min
và max
.
Thêm ví dụ cho biện pháp tốt
Ví dụ 1:
// Returns true if x is in range [min..max], else false
bool inRange(int x, int min=1, int max=100) => ((x - max)*(x - min) <= 0);
Console.WriteLine(inRange(25));
Console.WriteLine(inRange(1));
Console.WriteLine(inRange(100));
Console.WriteLine(inRange(25, 30, 150));
Console.WriteLine(inRange(-25, -50, 0));
Trả về:
True
True
True
False
True
Ví dụ 2: Sử dụng danh sách các số nguyên ngẫu nhiên trong khoảng từ 1 đến 150
// Returns true if x is in range [min..max], else false
bool inRange(int x, int min=1, int max=100) => ((x - max)*(x - min) <= 0);
// Generate 100000 ints between 1 and 150
var intsToCheck = new List<int>();
var randGen = new Random();
for(int i = 0; i < 100000; ++i){
intsToCheck.Add(randGen.Next(150) + 1);
}
var counter = 0;
foreach(int n in intsToCheck) {
if(inRange(n)) ++counter;
}
Console.WriteLine("{0} ints found in range 1..100", counter);
Trả về:
66660 ints found in range 1..100
Thời gian thực hiện: 0,016 giây