如果我使用的是这样的话:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
|=
到底完成了什么?
答案 0 :(得分:11)
|=
是将两个值组合在一起并将结果分配给第一个变量的快捷方式。
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
相当于:
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
|
是C#中的OR运算符,因此上面的代码有效地在值ReportValidationWarnings
上设置了xr.Settings.ValidationFlags
标记。
答案 1 :(得分:1)
在这种情况下,您在XmlSchemaValidationFlags.ReportValidationWarnings
中设置ValidationFlags
标记。
|=
通常是按位or
运算符,如果Flags
它用于设置标记。
答案 2 :(得分:1)
这是布尔OR-Equals。
相当于:
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
确保设置XmlSchemaValidationFlags.ReportValidationWarnings
中的位。
答案 3 :(得分:1)
这是复合作业。基本上你在做:
xr.Settings.ValidationFlags =
xr.Settings.ValidationFlags |
XmlSchemaValidationFlags.ReportValidationWarnings;
这实际上会将XmlSchemaValidationFlags.ReportValidationWarnings
添加到xr.Settings.ValidationFlags
中包含的标记集。
答案 4 :(得分:0)
正如其他人所提到的,a = = b是a = a |的简写b,与a = a + b的a = b短的方式大致相同。 现在什么是|操作员呢?它可以重载,但它的一般用法是按位OR。它类似于||运算符,但它可以逐位工作(将每个位视为布尔值):
false ||的确如此
0100 | 0110是0111
然后最后一点是,传递一堆布尔标志的经典方法之一是将它们编码为整数。单个32位整数可以容纳32个单独的标志,每位一个。要设置标志,请将相应位设置为1。
因此0000没有设置标志,而1001在第1和第4位设置了标志。
然后| =是设置特定标志的便捷方式。
int my_flags = 0;
my_flag | = validate_flag;
答案 5 :(得分:0)
driis' answer是正确的。
|=
与在条件测试中使用|
运算符相同,如以下示例所示:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings
在语义上与
相同xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings
|
与||
的补充说明我发现另一个有用的花絮是logical OR(|
)和conditional OR(||
)之间的区别:
即使第一个是true
,逻辑OR也将始终对两个操作数求值。如果第一个为false
,则条件OR将仅对第二个进行求值,如果不需要执行第二个操作数来确定最终结果,则有效地短路。