簡體   English   中英

按位或組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM