En C#, a menudo tengo que limitar un valor entero a un rango de valores. Por ejemplo, si una aplicación espera un porcentaje, un número entero de una entrada de usuario no debe ser menor que cero o más de cien. Otro ejemplo: si hay cinco páginas webs a las que se accede a través Request.Params["p"]
, esperaba un valor de 1 a 5, no es 0 o 256 o 99999.¿Cómo forzar a un número a estar en un rango en C#?
menudo termino escribiendo un código bastante feo como:
page = Math.Max(0, Math.Min(2, page));
o incluso más feo:
percentage =
(inputPercentage < 0 || inputPercentage > 100) ?
0 :
inputPercentage;
¿no hay una manera más inteligente de hacer tales cosas dentro de .NET Framework?
Sé que puedo escribir un método general int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)
y usarlo en todos los proyectos, pero tal vez ya exista un método mágico en el marco?
Si tengo que hacerlo manualmente, ¿cuál sería la "mejor" (es decir, menos fea y más rápida) forma de hacer lo que estoy haciendo en el primer ejemplo? ¿Algo como esto?
public int LimitToRange(int value, int inclusiveMinimum, int inlusiveMaximum)
{
if (value >= inclusiveMinimum)
{
if (value <= inlusiveMaximum)
{
return value;
}
return inlusiveMaximum;
}
return inclusiveMinimum;
}
Por lo general, se llama 'pinza': ver http://stackoverflow.com/questions/516500/is- there-a-canonical-name-for-a-function-combining-min-and-max y http://stackoverflow.com/questions/427477/fastest-way-to-clamp-a-real-fixed-floating- point-value y http://stackoverflow.com/questions/2683442/where-can-i-find-the-clamp-function-in-net y así sucesivamente. – ShreevatsaR