En vb.net o C# yo esperaría que el enfoque general más rápida para comparar una variable contra cualquier cantidad razonable de objetos nombrados por separado (a diferencia de, por ejemplo, todas las cosas en una colección) será simplemente comparar cada objeto contra la comparación de manera similar a como lo ha hecho. Es ciertamente posible crear una instancia de una colección y ver si contiene el objeto, y hacerlo puede ser más expresivo que comparar el objeto contra todos los elementos individualmente, pero a menos que uno use una construcción que el compilador pueda reconocer explícitamente, dicho código casi seguramente será mucho más lento que simplemente haciendo las comparaciones individuales. No me preocuparía la velocidad si el código, por su naturaleza, se ejecuta a lo sumo unos cientos de veces por segundo, pero desconfiaría de que el código se reordene a algo que se ejecuta mucho más a menudo de lo previsto originalmente.
Un enfoque alternativo, si una variable es algo así como un tipo de enumeración, es elegir valores de enumeración de potencia de dos para permitir el uso de máscaras de bits. Si el tipo de enumeración tiene 32 o menos valores válidos (por ejemplo, comenzar Harry = 1, Ron = 2, Hermione = 4, Ginny = 8, Neville = 16) uno podría almacenarlos en un entero y verificar múltiples bits a la vez en un solo operación ((if ((thisOne & (Harry | Ron | Neville | Beatrix))! = 0)/* Hacer algo * /. Esto permitirá un código rápido, pero está limitado a enumeraciones con un número pequeño de valores.
Un enfoque algo más poderoso, pero que debe usarse con cuidado, es usar algunos bits del valor para indicar atributos de algo, mientras que otros bits identifican el elemento. Por ejemplo, el bit 30 podría indicar que un personaje es masculino , el bit 29 podría indicar que es amigo de Harry, etc., mientras que los bits inferiores distinguen entre caracteres. Este enfoque permitiría agregar caracteres que pueden ser o no amigos de Harry, sin requerir el código que verifica amigo de Harry para cambiar. Una advertencia al hacer esto es que se debe distinguir entre las constantes de enumeración que se usan para ESTABLECER un valor de enumeración y las que se usan para PROBAR. Por ejemplo, para establecer una variable que indique Harry, puede que desee establecerlo en 0x60000001, pero para ver si una variable es Harry, uno debe probarla con 0x00000001.
Un enfoque más, que puede ser útil si el número total de valores posibles es moderado (por ejemplo, 16-16,000 o más) es tener una matriz de indicadores asociados con cada valor.Entonces uno podría codificar algo como "if (((characterAttributes [theCharacter] & chracterAttribute.Male)! = 0)". Este enfoque funcionará mejor cuando el número de caracteres sea bastante pequeño. Si el array es demasiado grande, el error de caché puede ralentizar nota del código hasta el punto de que las pruebas contra un pequeño número de caracteres de forma individual sería más rápido.
Más fácil es una preferencia personal. Personalmente, no creo que sea más fácil que 'value == 1 || valor == 2'. –
@Joel: Es fácil, pero no es intuitivo para alguien que está acostumbrado a decir "Quiero que sea 1 o 2". Como resultado, ha habido idiomas que implementan precisamente esta sintaxis; El idioma de consulta FOCUS de IBI, por ejemplo. –
@Steven Sudit - "Intuitivo" en ese contexto se reduce a las preferencias personales. –