5

私がこのようなものを使用している場合:

xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

|=達成とは正確には何ですか?

4

6 に答える 6

15

|=2 つの値を OR し、結果を最初の変数に代入するためのショートカットです。

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.ReportValidationWarningsこれは基本的に、に含まれるフラグのセットに追加されxr.Settings.ValidationFlagsます。

于 2012-12-19T18:07:36.463 に答える
0

他の人が述べたように、 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;

于 2012-12-19T18:44:55.137 に答える
0

ドリイスの答えは正しいです。

|=|次の例のように、条件テストで演算子を使用するのと同じです。

xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings

と意味的に同一です

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

|vsについての追記||

私が役に立つと思ったもう 1 つのヒントは、論理 OR ( |) と条件付き OR ( ||)の違いです。

最初のオペランドが であっても、論理 OR は常に両方のオペランドを評価しますtrue。条件付き OR は、最初のオペランドが の場合にのみ 2 番目のオペランドを評価falseし、最終結果を決定するために 2 番目のオペランドの実行が不要な場合は事実上短絡します。

于 2019-10-14T12:33:22.647 に答える