2012-04-27 9 views

Respuesta

9

Su primera versión ya incluye varios operadores en una expresión. Parece que desea aplicar múltiples operandos ("perro", "gato", "humano") a un único operador (== en este caso).

Para que ejemplo específico que puede usar:

// Note: could extract this array (or make it a set etc) and reuse the same 
// collection each time we evaluate this. 
if (new[] { "dog", "cat", "human" }.Contains(foo)) 

pero no hay una talla única para todos los generales de esta versión para todos los operadores.

EDITAR: Como se menciona en los comentarios, lo anterior no funcionará tan bien como la versión codificada.

+0

Debo señalar, que esto tendrá un desempeño peor que la simple codificación dura de la expresión (pero probablemente más flexible/mantenible) –

+0

@DaveBish: Lo haré, gracias. –

+0

@JonSkeet: gracias. He reformulado mi pregunta. Lo que estoy comparando (perro, gato, humano) es un operando, entonces, ¿qué es "foo"? ¿Operado? – KMC

1

puede hacer algo como esto:

List<string> values = new List<string> {"dog", "cat", "human"}; 
values.Any(s=>s.Equals(foo)); 

Pero en mi opinión el código que ya escrita es más fácil de leer que cualquier otra solución. Si no estamos hablando aquí de posibles docenas de opciones, naturalmente.

+0

¿Por qué usar Any en lugar de Contains? –

+0

@JonSkeet: ¿hace una diferencia en la lista ? – Tigran

+0

Bueno, es * más simple * usar 'Contiene' ... ¿por qué no usar el código más simple, que también es compatible con .NET 2.0? –

0

Siempre se puede probar, compilar y ver por sí mismo :)

("dog" || "cat" || "human") 

no es una expresión significativa para C#

Tal vez usted puede ponerlos en una matriz y un bucle sobre ellas.

O mejor aún, colóquelos en una matriz y obtenga una expresión lambda genial.

1

caso de uso del interruptor

switch(foo) 
{ 
    case "dog": 
    case "cat": 
    case "human": 
    //Your Code 
    break; 
} 
Cuestiones relacionadas