EDIT: Nuova risposta fornita. Stavo iniziando a usare C # quando ho scritto la prima risposta a questa domanda, e col senno di poi ora mi rendo conto che la mia "soluzione" era / è ingenua e inefficiente.
La mia risposta originale: andrei con la versione più semplice:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Un modo migliore
Dato che non ho visto altre soluzioni più efficienti (almeno secondo i miei test), ci proverò ancora.
Modo nuovo e migliore che funziona anche con intervalli negativi :
// 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);
Questo può essere utilizzato con intervalli sia positivi che negativi e per impostazione predefinita su un intervallo di
1..100 (incluso) e utilizza x
come numero da controllare seguito da un intervallo opzionale definito da min
e max
.
Aggiunta di esempi per una buona misura
Esempio 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));
Ritorna:
True
True
True
False
True
Esempio 2: utilizzo di un elenco di input casuali tra 1 e 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);
Ritorna:
66660 ints found in range 1..100
Tempo di esecuzione: 0,016 secondo (s)