5

如果我使用这样的东西:

xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

究竟是什么|=成就?

4

6 回答 6

15

|=是将两个值组合在一起并将结果分配给第一个变量的快捷方式。

xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

相当于:

xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;

|是 C# 中的 OR 运算符,因此上面的代码有效地ReportValidationWarnings在 value 上设置了标志xr.Settings.ValidationFlags

于 2012-12-19T18:07:07.553 回答
1

在这种情况下XmlSchemaValidationFlags.ReportValidationWarnings,您在ValidationFlags.

|=通常是按位运算or符,以防Flags它用于设置标志。

于 2012-12-19T18:06:29.927 回答
1

这是布尔 OR-Equals。

相当于:

xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;

这是确保XmlSchemaValidationFlags.ReportValidationWarnings设置的位。

于 2012-12-19T18:07:15.073 回答
1

那是一个复合作业。基本上你在做:

xr.Settings.ValidationFlags = 
    xr.Settings.ValidationFlags | 
    XmlSchemaValidationFlags.ReportValidationWarnings;

这基本上会添加XmlSchemaValidationFlags.ReportValidationWarningsxr.Settings.ValidationFlags.

于 2012-12-19T18:07:36.463 回答
0

正如其他人所提到的, a |= b 是 a = a | 的简写。b,就像 a += b 是 a = a + b 的缩写一样。现在是什么 | 运营商呢?它可以重载,但它的一般用途是按位或。它类似于 || 运算符,但它是逐位工作的(将每个位视为布尔值):

假 || 真的是真的

0100 | 0110 是 0111

最后一件事是传递一堆布尔标志的经典方法之一是将它们编码为整数。一个 32 位整数可以容纳 32 个单独的标志,每个位一个。要设置标志,请将相应的位设置为 1。

所以 0000 没有设置标志,而 1001 在位置 1 和 4 设置了标志。

然后 |= 是设置特定标志的便捷方法。

int my_flags = 0;

我的标志 |= 验证标志;

于 2012-12-19T18:44:55.137 回答
0

driis 的回答是正确的。

|=与在条件测试中使用运算符相同,|如下例所示:

xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings

在语义上等同于

xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings

|关于vs的附加说明||

我发现另一个有用的花絮是逻辑 OR ( |) 和条件 OR ( ||) 之间的区别:

逻辑 OR 将始终评估两个操作数,即使第一个是true. 条件 OR 只会在第一个是 时评估第二个,如果false不需要执行第二个操作数来确定最终结果,则有效地短路。

于 2019-10-14T12:33:22.647 回答