EDIT: Nova resposta fornecida. Eu estava começando a usar o C # quando escrevi a primeira resposta a essa pergunta e, em retrospectiva, agora percebo que minha "solução" era / é ingênua e ineficiente.
Minha resposta original: eu usaria a versão mais simples:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Uma maneira melhor
Como eu não vi nenhuma outra solução que seja mais eficiente (pelo menos de acordo com meus testes), tentarei outra vez.
Maneira nova e melhor que também funciona com intervalos 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);
Isso pode ser usado com faixas positivas e negativas e o padrão é uma faixa de
1..100 (inclusive) e usa x
como o número a ser verificado seguido por um intervalo opcional definido por min
e max
.
Adicionando exemplos para uma boa medida
Exemplo 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));
Devoluções:
True
True
True
False
True
Exemplo 2: Usando uma lista de entradas aleatórias entre 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);
Devoluções:
66660 ints found in range 1..100
Tempo de execução: 0,016 segundo (s)