【问题标题】:What's "|" mean in C# programming? [duplicate]什么是“|”在 C# 编程中是什么意思? [复制]
【发布时间】:2013-12-08 13:33:50
【问题描述】:

我经常读到这样的代码:

System.Diagnostics.DebuggableAttribute.DebuggingModes.DisableOptimizations | System.Diagnostics.DebuggableAttribute.DebuggingModes.EnableEditAndContinue | System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | System.Diagnostics.DebuggableAttribute.DebuggingModes.Default)

在C#程序中,有时参数是这样的,这是什么意思?

我从谷歌搜索过,但没有有价值的答案,'|'无法在 Google 引擎中进行属性解析,可能是我搜索时使用了错误的方式。

【问题讨论】:

  • 何时 |用作 ||它是 OR 运算符,在这里它用作枚举值
  • 见msdn

标签: c#


【解决方案1】:

'|'是按位的or 运算符,在这种情况下,它用于创建一个设置了所有给定位的枚举值。

DebuggingModes 是一个位标志枚举 - 这意味着每个位都可以指示一个标志,并且单个 DebuggingModes 值可用于表示多个标志。

枚举可以使用BitFlagsAttribute:

[FlagsAttribute]
public enum DebuggingModes
{
   Default = 0,
   DisableOptimizations = 1,
   EnableEditAndContinue = 2,
   ...
}

【讨论】:

  • 视情况而定。如果您要比较布尔值,这是一个非短路或比较(|| 是短路的)。对于整数类型(包括枚举),它确实是按位或。
【解决方案2】:

在这种情况下,它似乎是Flags enum

[Flags]
public enum Types
{
    None = 0,
    Type1 = 1,
    Type2 = 2,
    Type3 = 4,
}

所以

Types someType = Types.Type1 | Types.Type2;

意味着它有两种类型。

【讨论】:

    【解决方案3】:

    它是 C# 中的 bitwise OR operator。在这里,它用于创建具有所有给定位集的enum value。

    二进制 |运算符是为整数类型和 bool 预定义的。为了 整数类型,|计算其操作数的按位或。对于布尔 操作数,|计算其操作数的逻辑或;那就是 当且仅当它的两个操作数都为假时,结果才为假。

    【讨论】:

      【解决方案4】:

      这是一个逻辑or 运算符。完整说明请参见here。

      文档中的主要解释:

      二进制 |运算符是为整数类型和 bool 预定义的。对于整数类型,|计算其操作数的按位或。对于布尔操作数,|计算其操作数的逻辑或;也就是说,当且仅当它的两个操作数都为假时,结果才为假。

      【讨论】:

        【解决方案5】:

        何时 |用作 ||它是 OR 运算符,在这里它用作枚举值

        【讨论】:

          猜你喜欢
          • 2015-06-25
          • 2019-09-12
          • 2019-12-08
          • 2020-10-27
          • 2015-07-15
          • 2018-07-17
          • 2012-08-13
          • 2011-04-16
          • 1970-01-01
          相关资源
          最近更新 更多