私はdocumentationを見て、(1)(2)に答えて、| =演算子がどのようなもので、どのように動作するのかを説明しようとしていますが、基本的なレベルでは意味があります。またはそれが何を達成するか代入演算子(| =)はどのように機能しますか? (C#)
説明はa |= b
がa = a | b
と同等であると言うが、それは自分自身(a
)またはb
の値の値a
を与えるかどうかをどのように評価するか、私は得ることはありません。私の理解から、「または」はがの2つのうちの1つになることができることを意味しますが、2つのもののどちらを指定していません。
Visual Studioでは、Refactoring Essentialsと呼ばれる拡張機能を使用しています。これは、コードの一部を| =演算子で置き換えることを提案しています。コードはそこの演算子で動作しますが、それがどのように成し遂げられたのか、それは私にオンラインでそれを研究しようとするプロンプトでした(そしてその結果、この質問をしてください)。
私のコードは
if (MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No)
{
e.Cancel = true;
}
から
e.Cancel |= MessageBox.Show("Are you sure you want to cancel this operation?", "Confirm Cancel", MessageBoxButton.YesNo, MessageBoxImage.Exclamation, MessageBoxResult.No) == MessageBoxResult.No;
に行って、それはまだ働いていました。私はe.Cancel
がMessageBox.Show(...) == MessageBoxResult.No
の評価に基づいて決定されていると推測していますが、そこではなぜ= =演算子が必要なのかわかりません。式の結果がブール値で、e.Cancel
がブール値をとるので、単に標準代入(=)演算子を使用しないのはなぜですか?条件付き(?:)演算子の使用はどうですか? |それとどう比較すれば(たとえそれがあっても)?
これは別の方法です。その事が既にキャンセルされている場合(CancelはMessageBoxを表示する前にtrueの値をとります)、MessageBoxの回答は重要ではありません。しかし、私はそのようなリファクタリング結果のファンではないので、それは本当に読みにくく理解している。 :Pそれは不必要な過度のように見える。 – mikes
@mikes私が受け入れた答えは、オペレータがすべてについて理解してくれました。私はリファクタリングのことについて同意します。どのように私はこの1つにもしばらくの間困惑していたことを考えると、これはリファクタリングの可能性があります。コードの可読性を損なうので、私がコードに実装することはないという拡張が私に与えるいくつかの他のリファクタリングの選択肢があります。 – JaykeBird