EDIT: Новий відповідь надано. Я тільки починав використовувати 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 секунд