C# 按位或组合

C# 按位或组合,c#,.net,bit-manipulation,C#,.net,Bit Manipulation,这是最常用的正则表达式函数之一 Regex.IsMatch("Test text for regex test.", "(test)", RegexOptions.IgnoreCase | RegexOptions.Multiline); 你能解释一下Regex.IsMatch方法是如何工作的吗? 我的意思是它如何处理按位或RegexOptions参数? 它是如何定义方法参数的 谢谢回复 RegexOptions是一个应用了[Flags]属性的枚举。这允许对各种值应用逐位操作 您也可以执行类似

这是最常用的正则表达式函数之一

Regex.IsMatch("Test text for regex test.", "(test)",
RegexOptions.IgnoreCase | RegexOptions.Multiline);
你能解释一下Regex.IsMatch方法是如何工作的吗? 我的意思是它如何处理按位或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);
我刚刚根据Frank的评论做了更多的挖掘,他说有没有
[Flags]
属性,上面的代码都会编译并运行


关于
[Flags]
属性不起什么作用,除了“它影响
ToString()
结果”之外,还有其他评论,似乎没有人知道或想解释它的作用。在我编写的代码中,我使用
[Flags]
属性修饰我打算用作位字段的枚举,所以在这种情况下,它至少有点自我记录。否则,我就不知所措了。

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);
我刚刚根据Frank的评论做了更多的挖掘,他说有没有
[Flags]
属性,上面的代码都会编译并运行


关于
[Flags]
属性不起什么作用,除了“它影响
ToString()
结果”之外,还有其他评论,似乎没有人知道或想解释它的作用。在我编写的代码中,我使用
[Flags]
属性修饰我打算用作位字段的枚举,所以在这种情况下,它至少有点自我记录。否则,我就不知所措了。

RegexOptions是一个枚举,这意味着在内部,它被表示为一个整数。它的值如下所示:

// note the powers of 2
enum RegexOptions {
    IgnoreCase = 1,      MultiLine = 2,
    SomeOtherOption = 4, YetAnotherThing = 8 }
这些值的设计是为了,如果用二进制表示,则每个值都有一个单独的位


因此,如果您采用两个值的按位OR运算并得到一个结果,则可以通过计算(result和IgnoreCase)来确定是否设置了其中一个值(例如IgnoreCase)。

RegeOptions是一个枚举,这意味着在内部,它表示为整数。它的值如下所示:

// note the powers of 2
enum RegexOptions {
    IgnoreCase = 1,      MultiLine = 2,
    SomeOtherOption = 4, YetAnotherThing = 8 }
这些值的设计是为了,如果用二进制表示,则每个值都有一个单独的位


因此,如果您采用两个值的按位OR运算并得到结果,则可以通过计算(结果和IgnoreCase)来确定是否设置了其中一个值(例如IgnoreCase)。

有关标志的信息不正确。它将在没有Flags属性的情况下愉快地编译。但是,查看msdn文档,使用Flags属性会影响ToString()输出。编写一个Console.WriteLine(选项),并通过保留或删除属性来检查差异。顺便说一下,VB不会做这种事情。这实际上是非常愚蠢的,因为有时为标志名创建别名是有意义的,因为obviousl包含相同的值。所以这种解释至少是错误的。很多人反对,而有用的信息却很少。知道Flags属性的作用是什么吗?我认为我们已经涵盖了它没有充分发挥作用的地方。关于旗帜的信息是不正确的。它将在没有Flags属性的情况下愉快地编译。但是,查看msdn文档,使用Flags属性会影响ToString()输出。编写一个Console.WriteLine(选项),并通过保留或删除属性来检查差异。顺便说一下,VB不会做这种事情。这实际上是非常愚蠢的,因为有时为标志名创建别名是有意义的,因为obviousl包含相同的值。所以这种解释至少是错误的。很多人反对,而有用的信息却很少。知道Flags属性的作用是什么吗?我认为我们已经涵盖了它没有充分发挥作用的地方。