我不知道是否可能有如下情況:如何將一個以上的枚舉傳遞給只接收一個的方法?
Regex.Match
可以接收一個枚舉的方法,所以我可以指定:
RegexOptions.IgnoreCase
RegexOptions.IgnorePatternWhiteSpace
RegexOptions.Multiline
如果我需要指定的不僅僅是多了一個?(例如,我想我的正則表達式是Multiline
,我希望它忽略模式空格)。
我可以像使用C/C++一樣使用|
運算符嗎?
我不知道是否可能有如下情況:如何將一個以上的枚舉傳遞給只接收一個的方法?
Regex.Match
可以接收一個枚舉的方法,所以我可以指定:
RegexOptions.IgnoreCase
RegexOptions.IgnorePatternWhiteSpace
RegexOptions.Multiline
如果我需要指定的不僅僅是多了一個?(例如,我想我的正則表達式是Multiline
,我希望它忽略模式空格)。
我可以像使用C/C++一樣使用|
運算符嗎?
您需要使用[Flags]
屬性對其進行註釋,並使用|
運算符來合併它們。
在你提到的情況下,你可以這樣做,因爲RegexOptions
枚舉是用它註釋的。
A helpful way to use the FlagsAttribute with enumerations
定義:
[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;
如果你需要一個按位OR
一個Flags
enum:
var combine = RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline;
myFunction(combine);
如果不是這樣的枚舉,你的運氣了。
因爲它是一個枚舉具有標誌屬性,你可以使用:
RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhiteSpace | RegexOptions.Multiline
詳見http://msdn.microsoft.com/en-us/library/yd1hzczs.aspx。
請勿使用&
,請使用|
(您希望執行按位布爾OR)。
只是爲了增強答案,Flags屬性不是必需的。每個枚舉值可以與按位|組合運營商。 Flags屬性只是在將enum轉換爲字符串時使得enum變得更加可讀(例如,不是將按位結果看作數字的數字,而是將所選標誌組合在一起)。
要測試條件是否設置,您通常會使用按位&。這也將工作沒有Flags屬性。
在此屬性的MSDN文檔中有兩個枚舉的示例,一個與另一個沒有關聯:FlaggsAttribute。