BEARBEITEN: Neue Antwort bereitgestellt. Ich habe gerade mit C # angefangen, als ich die erste Antwort auf diese Frage schrieb, und im Nachhinein stelle ich jetzt fest, dass meine "Lösung" naiv und ineffizient war / ist.
Meine ursprüngliche Antwort: Ich würde mit der einfacheren Version gehen:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
Ein besserer Weg
Da ich keine andere Lösung gesehen habe, die effizienter ist (zumindest nach meinen Tests), werde ich es noch einmal versuchen.
Neuer und besserer Weg, der auch mit negativen Bereichen funktioniert :
// 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);
Dies kann sowohl mit positiven als auch mit negativen Bereichen verwendet werden und ist standardmäßig auf einen Bereich von eingestellt
1..100 (einschließlich) und wird x
als zu prüfende Nummer verwendet, gefolgt von einem optionalen Bereich, der durch min
und definiert ist max
.
Hinzufügen von Beispielen für eine gute Maßnahme
Beispiel 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));
Kehrt zurück:
True
True
True
False
True
Beispiel 2: Verwenden einer Liste zufälliger Ints zwischen 1 und 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);
Kehrt zurück:
66660 ints found in range 1..100
Ausführungszeit: 0,016 Sekunde (n)