En C#, je dois souvent limiter une valeur entière à une plage de valeurs. Par exemple, si une application attend un pourcentage, un entier d'une entrée utilisateur ne doit pas être inférieur à zéro ou supérieur à cent. Un autre exemple: s'il y a cinq pages Web qui sont accessibles par Request.Params["p"]
, j'attends une valeur de 1 à 5, de 0 ou 256 ou 99999.Comment forcer un nombre à être dans une plage en C#?
Je termine souvent en écrivant un code assez laid comme:
page = Math.Max(0, Math.Min(2, page));
ou encore plus laid:
percentage =
(inputPercentage < 0 || inputPercentage > 100) ?
0 :
inputPercentage;
est pas là une façon plus intelligente de faire de telles choses dans .NET Framework?
Je sais que je peux écrire une méthode générale int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)
et l'utiliser dans tous les projets, mais peut-être qu'il existe déjà une méthode magique dans le cadre?
Si je devais le faire manuellement, quel serait le «meilleur» moyen (c'est-à-dire moins laid et plus rapide) de faire ce que je fais dans le premier exemple? Quelque chose comme ça?
public int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)
{
if (value >= inclusiveMinimum)
{
if (value <= inlusiveMaximum)
{
return value;
}
return inlusiveMaximum;
}
return inclusiveMinimum;
}
Il est généralement appelé « pince »: voir http://stackoverflow.com/questions/516500/is- il-a-un-canonical-nom-pour-une-fonction-combinaison-min-et-max et http://stackoverflow.com/questions/427477/fastest-way-to-clamp-a-real-fixed-floating- point-value et http://stackoverflow.com/questions/2683442/where-can-i-find-the-clamp-function-in-net et ainsi de suite. – ShreevatsaR