declaraciones if que coinciden con múltiples valores
¿Alguna forma más sencilla de escribir esta declaración if?
if (value==1 || value==2)
Por ejemplo... en SQL puedes decir where value in (1,2)
en lugar de where value=1 or value=2
.
Estoy buscando algo que funcione con cualquier tipo básico... string, int, etc.
Qué tal si:
if (new[] {1, 2}.Contains(value))
Aunque es un truco :)
O si no le importa crear su propio método de extensión, puede crear lo siguiente:
public static bool In<T>(this T obj, params T[] args)
{
return args.Contains(obj);
}
Y puedes usarlo así:
if (1.In(1, 2))
:)
C# 9 admite esto directamente:
if (value is 1 or 2)
sin embargo, en muchos casos: switch
podría ser más claro (especialmente con mejoras de sintaxis más recientes switch
). Puedes ver esto aquí , con la if (value is 1 or 2)
compilación idéntica a if (value == 1 || value == 2)
.
Una forma más complicada :) que emula el 'IN' de SQL:
public static class Ext {
public static bool In<T>(this T t,params T[] values){
foreach (T value in values) {
if (t.Equals(value)) {
return true;
}
}
return false;
}
}
if (value.In(1,2)) {
// ...
}
Pero opte por la forma estándar, es más legible.
EDITAR : una mejor solución, según la sugerencia de @Kobi:
public static class Ext {
public static bool In<T>(this T t,params T[] values){
return values.Contains(t);
}
}