这是最常用的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]属性装饰了我打算用作位域的枚举,因此在这种情况下,它至少在某种程度上是自记录的。否则,我很茫然。

10-01 23:30