РЕДАКТИРОВАТЬ: Новый ответ при условии. Я только начинал использовать C #, когда написал первый ответ на этот вопрос, и теперь я понимаю, что мое «решение» было / наивно и неэффективно.
Мой оригинальный ответ: я бы пошел с более простой версией:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Лучший путь
Поскольку я не видел ни одного другого более эффективного решения (по крайней мере, согласно моим тестам), я попробую еще раз.
Новый и лучший способ, который также работает с отрицательными диапазонами :
// 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);
Это может использоваться как с положительным, так и с отрицательным диапазоном, а по умолчанию используется диапазон
1..100 (включительно) и использует x
в качестве номера для проверки, за которым следует необязательный диапазон, определяемый min
и max
.
Добавление примеров для хорошей меры
Пример 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));
Возвращает:
True
True
True
False
True
Пример 2. Использование списка случайных чисел от 1 до 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);
Возвращает:
66660 ints found in range 1..100
Время выполнения: 0,016 секунды