La mayoría de una forma concisa para determinar si una variable es igual a un valor de una lista de valores

StackOverflow https://stackoverflow.com/questions/18407

  •  09-06-2019
  •  | 
  •  

Pregunta

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

Yo no estoy buscando una solución que almacena el conjunto en una matriz.Yo soy más curioso para ver si hay una solución que utiliza la lógica booleana en alguna manera de obtener la respuesta.

Sé que yo podría hacer algo como esto:

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

Tengo curiosidad para ver si podía hacer algo más parecido a esto:

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

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

ACTUALIZACIÓN:
Decidí aceptar CoreyN la respuesta de como parece que éste es el método más sencillo.Es práctico, y sin embargo sencillo para un novato de entender, creo.

Por desgracia donde yo trabajo nuestro sistema utiliza el .NET framework 2.0 y que no existe la posibilidad de actualizar cualquier momento pronto.Existen otras soluciones en el mercado que no dependen de el .NET 3.5 framework, además de la más obvia puedo pensar:

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

Solución

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

Otros consejos

Usted puede hacer algo similar con .NET 2.0, aprovechando el hecho de que una matriz de T implementa la interfaz IList<T>y IList<T> tiene un método Contains.Por tanto, la siguiente es equivalente a la de Corey .NET 3.5 solución, aunque, obviamente, menos claro:

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

Yo uso a menudo IList<T> para la serie de declaraciones, o al menos para pasar de una dimensión de la matriz de argumentos.Esto significa que usted puede utilizar IList propiedades tales como el Conde, y cambiar de una matriz en una lista fácilmente.E. g.

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

Yo normalmente uso CoreyN's solución para los casos simples como eso.Algo más complejo, el uso de una consulta LINQ.

Dado que no se especifica qué tipo de datos tiene como entrada voy a asumir que usted puede partición de su entrada en potencias de 2 -> 2,4,8,16...Esto le permitirá utilizar los bits para determinar si el valor de prueba es uno de los bits de la entrada.

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

el uso de algunos de matemáticas binario...

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top