¿Cómo puedo pasar más de una enumeración a un método que recibe solo una?

Me pregunto si lo siguiente es posible:

El método Regex.Match puede recibir una enumeración, así que puedo especificar:

RegexOptions.IgnoreCase
RegexOptions.IgnorePatternWhiteSpace
RegexOptions.Multiline

¿Qué pasa si necesito especificar más de uno? (p. ej., quiero que mi expresión regular sea Multiline y quiero que ignore los espacios en blanco del patrón).

Podría usar | operador como en C / C ++?

preguntado el 16 de mayo de 11 a las 19:05

5 Respuestas

Necesitas anotarlo con [Flags] atributo y uso | operador para combinarlos.

En el caso que mencionaste, puedes hacerlo porque RegexOptions enum está anotado con él.


Más referencias:

Una forma útil de usar FlagsAttribute con enumeraciones

Fragmento de ejemplo del artículo de CodeProject anterior:

Definición:

[FlagsAttribute]
public enum NewsCategory : int 
{
    TopHeadlines =1,
    Sports=2,
    Business=4,
    Financial=8,
    World=16,
    Entertainment=32,
    Technical=64,
    Politics=128,
    Health=256,
    National=512
}

Uso:

mon.ContentCategories = NewsCategory.Business | 
                        NewsCategory.Entertainment | 
                        NewsCategory.Politics;

Respondido el 20 de junio de 20 a las 12:06

Dado que es una enumeración con un atributo Flags, puede usar:

RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline

contestado el 16 de mayo de 11 a las 23:05

Si es un Flags enumerar necesitas hacerlo bit a bit OR:

var combine = RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline;
myFunction(combine);

Si esta no es una enumeración, no tiene suerte.

contestado el 16 de mayo de 11 a las 23:05

Vea http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx para más detalles.

No use &, Utilizar | (desea hacer un OR booleano bit a bit).

contestado el 16 de mayo de 11 a las 23:05

Solo para mejorar un poco las respuestas, el atributo Banderas no es un requisito. Cada valor de enumeración se puede combinar con el bit a bit | operador. El atributo Flags solo hace que la enumeración sea un poco más legible cuando se convierte en una cadena (por ejemplo, en lugar de ver un número con el resultado bit a bit como un número, verá las banderas seleccionadas combinadas).

Para probar si se establece una condición, normalmente usaría un &. Esto también funcionará sin el atributo Flags.

En la documentación de MSDN para este atributo hay un ejemplo de dos enumeraciones, una con y la otra sin él: FlaggsAttribute.

contestado el 17 de mayo de 11 a las 00:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.