【发布时间】:2012-12-07 03:50:12
【问题描述】:
如果我使用这样的东西:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
|= 到底在做什么?
【问题讨论】:
标签: c# .net operators assignment-operator
如果我使用这样的东西:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
|= 到底在做什么?
【问题讨论】:
标签: c# .net operators assignment-operator
driis' answer 是正确的。
|= 与在条件测试中使用 | 运算符相同,如下例所示:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings
在语义上与
相同xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings
| 与 || 的附加说明
我发现另一个有用的花絮是logical OR (|) 和 conditional OR (||) 之间的区别:
逻辑 OR 将始终计算两个操作数,即使第一个是 true。条件 OR 只会在第一个是 false 时评估第二个,如果不需要执行第二个操作数来确定最终结果,则有效地短路。
【讨论】:
正如其他人所提到的,a |= b 是 a = a | 的简写。 b,就像 a += b 是 a = a + b 的缩写一样。 现在是什么 |运营商呢?它可以重载,但它的一般用途是按位或。它类似于 ||运算符,但它是逐位工作的(将每个位视为布尔值):
假 ||真的是真的
0100 | 0110是0111
最后一件事是传递一堆布尔标志的经典方法之一是将它们编码为整数。一个 32 位整数可以容纳 32 个单独的标志,每个位一个。要设置标志,请将相应位设置为 1。
所以 0000 没有设置标志,而 1001 在位置 1 和 4 设置了标志。
那么 |= 是设置特定标志的便捷方式。
int my_flags = 0;
my_flag |= validate_flag;
【讨论】:
这是一个复合赋值。基本上你在做:
xr.Settings.ValidationFlags =
xr.Settings.ValidationFlags |
XmlSchemaValidationFlags.ReportValidationWarnings;
这实际上会将XmlSchemaValidationFlags.ReportValidationWarnings 添加到xr.Settings.ValidationFlags 中包含的标志集。
【讨论】:
这是布尔 OR-Equals。
相当于:
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
确保XmlSchemaValidationFlags.ReportValidationWarnings 中的位已设置。
【讨论】:
|= 是将两个值组合在一起并将结果分配给第一个变量的快捷方式。
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
相当于:
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
| 是 C# 中的 OR 运算符,因此上面的代码有效地在值 xr.Settings.ValidationFlags 上设置了 ReportValidationWarnings 标志。
【讨论】:
1001 1101 和你OR 它和1100 1011 你会得到1101 1111。如果它在任一操作数中设置了一个位,则在结果中设置它。 |= 的简写只是说明OR 的左侧操作数是|= 左侧的操作数。
bool b = true; b |= false; 但 b 仍然返回 true。我觉得自己很愚蠢,但我不明白这如何转化为上面发生的事情。
| 表示OR;如果任一参数为真,则结果为真。在这种情况下,它是按位的OR,这意味着如果任一参数中的任何位为 1,则它保持为 1。
在这种情况下,您将在 ValidationFlags 中设置 XmlSchemaValidationFlags.ReportValidationWarnings 标志。
|= 一般是按位的or 运算符,如果是Flags,则用于设置标志。
【讨论】: