Как я могу передать более одного перечисления в метод, который получает только один? - PullRequest
9 голосов
/ 16 мая 2011

Мне интересно, возможно ли следующее:

Метод Regex.Match может получить перечисление, поэтому я могу указать:

RegexOptions.IgnoreCase
RegexOptions.IgnorePatternWhiteSpace
RegexOptions.Multiline

Что, если мне нужно указать более одного? (например, я хочу, чтобы мое регулярное выражение было Multiline, и я хочу, чтобы оно игнорировало пробел в шаблоне).

Могу ли я использовать оператор | как в C / C ++?

Ответы [ 5 ]

20 голосов
/ 16 мая 2011

Вам нужно аннотировать его с помощью атрибута [Flags] и использовать оператор |, чтобы объединить их.

В случае, который вы упомянули, вы можете сделатьэто потому, что перечисление RegexOptions аннотировано.


Дополнительные ссылки:

Полезный способ использовать атрибут FlagsAttribute с перечислениями

Пример фрагмента сверху CodeProject артикул:

Определение:

[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
}

Использование:

mon.ContentCategories = NewsCategory.Business | 
                        NewsCategory.Entertainment | 
                        NewsCategory.Politics;
3 голосов
/ 16 мая 2011

Поскольку это Enum с атрибутом Flags, вы можете использовать:

RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline
1 голос
/ 16 мая 2011

Подробнее см. http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx.

Не используйте &, используйте | (вы хотите использовать битовое логическое ИЛИ).

1 голос
/ 16 мая 2011

Если это Flags перечисление , вам нужно поразрядно OR:

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

Если это не такое перечисление, вам не повезло.

0 голосов
/ 17 мая 2011

Просто чтобы немного улучшить ответы, атрибут Flags не является обязательным.Каждое значение перечисления может быть объединено с побитовым |оператор.Атрибут Flags делает перечисление немного более читабельным при преобразовании в строку (например, вместо того, чтобы видеть число с побитовым результатом в виде числа, вы видите выбранные флаги вместе).

Чтобы проверить, является лиусловие установлено, вы обычно использовали бы побитовый &.Это также будет работать без атрибута Flags.

В документации MSDN для этого атрибута есть пример двух перечислений, одно с, а другое без него: FlaggsAttribute .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...