私がこのようなものを使用している場合:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
|=
達成とは正確には何ですか?
私がこのようなものを使用している場合:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
|=
達成とは正確には何ですか?
|=
2 つの値を OR し、結果を最初の変数に代入するためのショートカットです。
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
以下と同等です。
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
|
は C# の OR 演算子であるため、上記のコードは実質的ReportValidationWarnings
に value にフラグを設定しますxr.Settings.ValidationFlags
。
この場合、にXmlSchemaValidationFlags.ReportValidationWarnings
フラグを設定していますValidationFlags
。
|=
フラグを設定するために使用される場合、通常はビット単位or
の演算子です。Flags
これはブール OR-Equals です。
以下と同等:
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
XmlSchemaValidationFlags.ReportValidationWarnings
これにより、ビットが設定されていることが保証されます。
それは複合割り当てです。基本的にあなたがやっている:
xr.Settings.ValidationFlags =
xr.Settings.ValidationFlags |
XmlSchemaValidationFlags.ReportValidationWarnings;
XmlSchemaValidationFlags.ReportValidationWarnings
これは基本的に、に含まれるフラグのセットに追加されxr.Settings.ValidationFlags
ます。
他の人が述べたように、 a |= b は a = a | の省略形です。a += b は a = a + b の略です。今、| は何をしますか?オペレーターは?オーバーロードできますが、一般的な使用法はビットごとの OR です。|| に似ています。演算子ですが、ビット単位で機能します (各ビットをブール値と考えてください):
|| 偽 || 本当は本当です
0100 | 0110 は 0111
最後に、一連のブール値フラグを渡す古典的な方法の 1 つは、それらを整数にエンコードすることです。1 つの 32 ビット整数は、ビットごとに 1 つずつ、32 個の個別のフラグを保持できます。フラグを設定するには、対応するビットを 1 に設定します。
したがって、0000 にはフラグが設定されていませんが、1001 には位置 1 と 4 にフラグが設定されています。
|= は、特定のフラグを設定する便利な方法です。
int my_flags = 0;
my_flag |= validate_flag;
ドリイスの答えは正しいです。
|=
|
次の例のように、条件テストで演算子を使用するのと同じです。
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings
と意味的に同一です
xr.Settings.ValidationFlags = xr.Settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings
|
vsについての追記||
私が役に立つと思ったもう 1 つのヒントは、論理 OR ( |
) と条件付き OR ( ||
)の違いです。
最初のオペランドが であっても、論理 OR は常に両方のオペランドを評価しますtrue
。条件付き OR は、最初のオペランドが の場合にのみ 2 番目のオペランドを評価false
し、最終結果を決定するために 2 番目のオペランドの実行が不要な場合は事実上短絡します。