[英]Bitwise OR Combination
這是最常用的Regex函數之一
Regex.IsMatch("Test text for regex test.", "(test)",
RegexOptions.IgnoreCase | RegexOptions.Multiline);
您能解釋一下Regex.IsMatch方法如何工作嗎? 我的意思是它如何處理按位OR RegexOptions參數? 它如何定義方法參數?
感謝您的答復!
RegexOptions
是應用了[Flags]
屬性的枚舉。 這允許將按位運算應用於各種值。
您還可以執行類似的操作:
[Flags]
enum MyOptions {
UpperCase = 1,
Reverse = 2,
Trim = 4
}
public static void DoTransform(MyOptions options) {
if ((options & MyOptions.UpperCase) == MyOptions.UpperCase) {
/* Do Upper case transform */
}
if ((options & MyOptions.Reverse) == MyOptions.Reverse) {
/* Do Reverse transform */
}
/* etc, ... */
}
DoTransform(MyOptions.UpperCase | MyOptions.Reverse);
我只是根據弗蘭克的評論做了一些進一步的挖掘,他是正確的,不管有沒有[Flags]
屬性,上面的代碼都可以編譯並運行。
關於[Flags]
屬性沒有做什么的其他評論,除了“它影響ToString()
結果”之外,似乎沒有人知道或不想解釋它做什么。 在我編寫的代碼中,我希望使用[Flags]
屬性為要用作位域的枚舉進行裝飾,因此在這種情況下,它至少具有一定的自我說明性。 否則,我很茫然。
RegexOptions是一個枚舉,意味着在內部,它表示為整數。 它的值如下所示:
// note the powers of 2
enum RegexOptions {
IgnoreCase = 1, MultiLine = 2,
SomeOtherOption = 4, YetAnotherThing = 8 }
這些值經過精心設計,因此,如果以二進制形式表示它們,則每個值都有一個單獨的位。
因此,如果對兩個值進行按位或運算並得出結果,則可以通過評估(結果和IgnoreCase)來確定是否設置了其中一個值(例如IgnoreCase)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.