not logico diferente condicionales and c# logic boolean-logic

c# - logico - La manera más sucinta de determinar si una variable es igual a un valor de una ''lista'' de valores



not en c# (4)

Si tengo una variable en C # que debe verificarse para determinar si es igual a uno de un conjunto de variables, ¿cuál es la mejor manera de hacerlo?

No estoy buscando una solución que almacene el conjunto en una matriz. Tengo más curiosidad por ver si hay una solución que usa la lógica booleana de alguna manera para obtener la respuesta.

Sé que podría hacer algo como esto:

int baseCase = 5; bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;

Tengo curiosidad por ver si puedo hacer algo como esto:

int baseCase = 5; bool testResult = baseCase == (3 | 7 | 12 | 5);

Obviamente, lo anterior no funcionará, pero estoy interesado en ver si hay algo más sucinto que mi primer ejemplo, que tiene que repetir la misma variable una y otra vez para cada valor de prueba.

ACTUALIZAR:
Decidí aceptar la respuesta de CoreyN ya que parece ser el enfoque más simple. Es práctico, y aún muy simple de entender para un novato, creo.

Desafortunadamente, donde trabajo nuestro sistema usa el framework .NET 2.0 y no hay posibilidad de actualizar en el corto plazo. ¿Hay alguna otra solución que no dependa del framework .NET 3.5, además de la más obvia que se me ocurre?

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);


bool b = new int[] { 3,7,12,5 }.Contains(5);


Como no especificó qué tipo de datos tiene como entrada, supongo que puede dividir su entrada en potencias de 2 -> 2,4,8,16 ... Esto le permitirá usar los bits para determinar si su valor de prueba es uno de los bits en la entrada.

4 => 0000100
16 => 0010000
64 => 1000000

usando algunas matemáticas binarias ...

testList = 4 + 16 + 64 => 1010100
testValue = 16
testResult = testList & testValue


Puede hacer algo similar con .NET 2.0, aprovechando el hecho de que un conjunto de T implementa IList <T> e IList <T> tiene un método Contiene. Por lo tanto, lo siguiente es equivalente a la solución .NET 3.5 de Corey, aunque obviamente menos clara:

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5);

A menudo utilizo IList <T> para las declaraciones de matriz, o al menos para pasar argumentos de matriz unidimensionales. Significa que puede usar propiedades de IList como Count y cambiar fácilmente de una matriz a una lista. P.ej

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };


Usualmente uso la solución de CoreyN para casos simples como ese. Algo más complejo, use una consulta LINQ.