【问题标题】:What is | in C# here?什么是|在 C# 这里?
【发布时间】:2026-02-23 13:10:02
【问题描述】:

在下面的代码块中有几个按位或。我以前从未使用过它们,所以我试图理解代码块的含义。

    Document doc = new Document("CleanupOptions.docx");
    doc.MailMerge.CleanupOptions = MailMergeCleanupOptions.RemoveUnusedRegions |
    MailMergeCleanupOptions.RemoveUnusedFields |
    MailMergeCleanupOptions.RemoveContainingFields;
    doc.MailMerge.ExecuteWithRegions(dataSet);

所以在上面的那个块中,如果我使用 doc.MailMerge.CleanupOptions,我将如何选择 CleanupOptions 等于的任何语句?还是它们都结合在一起了?

【问题讨论】:

  • 这个 Q/A 很好地解释了带有 [Flags] 的枚举:*.com/questions/8447/…
  • 关于flags
  • 假设 CleanupOptions 是一个位域枚举,这只是连接常量...

标签: c# bitwise-operators aspose.words bitwise-or


【解决方案1】:

它们都结合在一起。枚举可以用允许值组合的 [FlagsAttribute] 标记:

https://msdn.microsoft.com/en-us/library/system.flagsattribute(v=vs.110).aspx

【讨论】:

    【解决方案2】:

    MailMergeCleanupOptions 是一个指定了 FlagsAttribute 的枚举。这使您可以按位或将值加入集合中。通常,这些值是 2 的幂或标志的组合。

    【讨论】:

    • 这并不是真正的 [Flags] 属性,但该属性的作用很小。它是枚举本身与消费代码的解释方式相结合。
    • 如果您按位或在没有 [Flags] 属性的枚举上执行操作,编译器会报错。
    • 不,它没有,你甚至让我怀疑自己,我去尝试它
    • 必须是抱怨的 ReSharper。有时我会忘记是哪一个生成了哪些警告。