Il modo più succinto per determinare se una variabile è uguale a un 'elenco' di valori


9

Se ho una variabile in C# che deve essere controllata per determinare se è uguale a uno di un insieme di variabili, qual è il valore miglior modo per farlo?

Non sto cercando una soluzione che memorizza il set in un array. Sono più curioso di vedere se c'è una soluzione che utilizza la logica booleana in qualche modo per ottenere la risposta.

So che potrei fare qualcosa di simile:

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

Sono curioso di vedere se potevo fare qualcosa di più simile a questo:

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

Ovviamente quanto sopra non funziona, ma sono interessato a vedere se c'è qualcosa di più succinto del mio primo esempio, che deve ripetere la stessa variabile più e più volte per ogni valore di test.

UPDATE:
ho deciso di accettare la risposta di CoreyN come sembra l'approccio più semplice. È pratico, e ancora semplice per un principiante capire, penso.

Sfortunatamente dove lavoro il nostro sistema utilizza il framework .NET 2.0 e non c'è possibilità di eseguire l'aggiornamento in qualsiasi momento a breve. Ci sono altre soluzioni là fuori che non si basano sul framework .NET 3.5, oltre alla più ovvia mi viene in mente:

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

Ecco un .NET 2.0 soluzione, un po 'più complessa di quella di Corey: http://stackoverflow.com/questions/18407#153037 30 set. 082008-09-30 13:38:51

  0

Un esempio di javascript http://stackoverflow.com/questions/12116326 21 gen. 152015-01-21 21:23:45

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

0

Io di solito uso s solutionCoreyN' per i casi semplici come quella. Qualunque cosa più complessa, usa una query LINQ.


-1

Dato che non hai specificato quale tipo di dati hai come input presumo tu possa suddividere il tuo input in potenze di 2 -> 2,4,8,16 ... Questo ti permetterà di usare i bit per determinare se il valore del test è uno dei bit nell'input.

4 => 0000100
16 => 0.010.000
64 => 1000000

utilizzando po 'di matematica binaria ...

TestList = 4 + 16 + 64 => 1010100
testvalue = 16
TestResult = TestList & testvalue


1

Si può fare qualcosa di simile con NET 2.0, sfruttando il fatto che una matrice o f Attua IList <T> e IList <T> ha un metodo Contiene. Pertanto il seguente è equivalente alla soluzione 3,5 NET di Corey, anche se ovviamente meno chiari:

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

uso spesso IList <T> per dichiarazioni di matrice, o almeno per passare argomenti unidimensionali matrice. Significa che puoi usare le proprietà di IList come Count e passare facilmente da una matrice ad una lista. Per esempio.

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