2011-05-16 23 views
9

我不知道是否可能有如下情況:如何將一個以上的枚舉傳遞給只接收一個的方法?

Regex.Match可以接收一個枚舉的方法,所以我可以指定:

RegexOptions.IgnoreCase 
RegexOptions.IgnorePatternWhiteSpace 
RegexOptions.Multiline 

如果我需要指定的不僅僅是多了一個?(例如,我想我的正則表達式是Multiline,我希望它忽略模式空格)。

我可以像使用C/C++一樣使用|運算符嗎?

回答

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

如果你需要一個按位OR一個Flags enum

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

如果不是這樣的枚舉,你的運氣了。

3

因爲它是一個枚舉具有標誌屬性,你可以使用:

RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline 
0

只是爲了增強答案,Flags屬性不是必需的。每個枚舉值可以與按位|組合運營商。 Flags屬性只是在將enum轉換爲字符串時使得enum變得更加可讀(例如,不是將按位結果看作數字的數字,而是將所選標誌組合在一起)。

要測試條件是否設置,您通常會使用按位&。這也將工作沒有Flags屬性。

在此屬性的MSDN文檔中有兩個枚舉的示例,一個與另一個沒有關聯:FlaggsAttribute

相關問題