declaraciones if que coinciden con múltiples valores

Resuelto Ricky asked hace 14 años • 16 respuestas

¿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.

Ricky avatar Oct 11 '10 21:10 Ricky
Aceptado

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))

:)

Amry avatar Oct 11 '2010 14:10 Amry

C# 9 admite esto directamente:

if (value is 1 or 2)

sin embargo, en muchos casos: switchpodrí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).

Marc Gravell avatar Mar 30 '2021 16:03 Marc Gravell

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);
    }
}
Paolo Tedesco avatar Oct 11 '2010 14:10 Paolo Tedesco