EDITAR: Nueva respuesta proporcionada. Estaba comenzando a usar C # cuando escribí la primera respuesta a esta pregunta, y en retrospectiva ahora me doy cuenta de que mi "solución" era / es ingenua e ineficiente.
Mi respuesta original: iría con la versión más simple:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Una mejor manera
Como no he visto ninguna otra solución que sea más eficiente (al menos según mis pruebas), lo intentaré de nuevo.
Nueva y mejor manera que también funciona con rangos negativos :
// 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);
Esto se puede usar con rangos positivos y negativos y los valores predeterminados para un rango de
1..100 (inclusive) y se utiliza x
como número para verificar seguido de un rango opcional definido por min
y max
.
Agregar ejemplos de buena medida
Ejemplo 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));
Devoluciones:
True
True
True
False
True
Ejemplo 2: uso de una lista de entradas aleatorias entre 1 y 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);
Devoluciones:
66660 ints found in range 1..100
Tiempo de ejecución: 0.016 segundo (s)