如何将多个枚举传递给只接收一个枚举的方法?

时间:2011-05-16 19:25:23

标签: c# parameters enums parameter-passing

我想知道以下是否可行:

方法Regex.Match可以接收枚举,因此我可以指定:

RegexOptions.IgnoreCase
RegexOptions.IgnorePatternWhiteSpace
RegexOptions.Multiline

如果我需要指定的不仅仅是一个怎么办?(例如,我希望我的正则表达式为Multiline,我希望它忽略模式空白)。

我可以像在C / C ++中一样使用|运算符吗?

5 个答案:

答案 0 :(得分:20)

您需要使用[Flags]属性对其进行注释,并使用|运算符进行组合。

在你提到的情况下,你可以这样做,因为RegexOptions枚举用它注释。


更多参考文献:

A helpful way to use the FlagsAttribute with enumerations

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;

答案 1 :(得分:3)

由于它是带有标志属性的枚举,您可以使用:

RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline

答案 2 :(得分:1)

如果是Flags enum,您需要按位OR

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

如果这不是一个枚举,那你就不走运了。

答案 3 :(得分:1)

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx

请勿使用&,请使用|(您想要进行逐位布尔OR)。

答案 4 :(得分:0)

只是为了增强答案,Flags属性不是必需的。每个枚举值都可以与按位组合运营商。 Flags属性仅在转换为字符串时使枚举更具可读性(例如,而不是将按位结果的数字视为数字,您会看到所选标记的组合)。

要测试是否设置了条件,通常会使用按位&amp ;.这也可以在没有Flags属性的情况下工作。

在此属性的MSDN文档中,有两个枚举的示例,一个包含,另一个没有它:FlaggsAttribute