MODIFIER: Nouvelle réponse fournie. Je commençais à peine à utiliser C # lorsque j'ai écrit la première réponse à cette question, et avec le recul je me rends compte maintenant que ma «solution» était / est naïve et inefficace.
Ma réponse originale: j'irais avec la version la plus simple:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Une meilleure façon
Comme je n'ai vu aucune autre solution plus efficace (au moins d'après mes tests), je vais essayer de nouveau.
Nouvelle et meilleure méthode qui fonctionne également avec des plages négatives :
// 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);
Cela peut être utilisé avec des plages positives et négatives et par défaut sur une plage de
1..100 (inclus) et utilise x
comme nombre à vérifier suivi d'une plage facultative définie par min
et max
.
Ajouter des exemples pour une bonne mesure
Exemple 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));
Retour:
True
True
True
False
True
Exemple 2: Utilisation d'une liste de nombres entiers aléatoires entre 1 et 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);
Retour:
66660 ints found in range 1..100
Temps d'exécution: 0.016 seconde (s)