重複の可能性:
||= または &&= 演算子がないのはなぜですか?
全くの偶然で、私は今日それを知りました
a &= GetBool();
と同じではありません
a = a && GetBool();
私は何年もそれを誤解していたに違いありません。最初の例でGetBool()
は、" a" が false であっても " " が実行されます。第二に、そうではありません。
C#で「&&=」のようなことを達成するものはありますか?
重複の可能性:
||= または &&= 演算子がないのはなぜですか?
全くの偶然で、私は今日それを知りました
a &= GetBool();
と同じではありません
a = a && GetBool();
私は何年もそれを誤解していたに違いありません。最初の例でGetBool()
は、" a" が false であっても " " が実行されます。第二に、そうではありません。
C#で「&&=」のようなことを達成するものはありますか?
C#で「&&=」のようなことを達成するものはありますか?
まあ、あなたは書くことができます
a = a && getBool();
代わりに...正直なところ、実際に何か違うことをしたいと思う状況はあまり思いつきません。上記でもかなりまれです、IME。
&&
、||
orに対して定義された複合代入演算子はありません??
(これは明らかな「短絡」演算子です)。複合代入演算子の完全なリストについては、C# 4 仕様のセクション7.17を参照してください。
ドキュメントから:
次のような &= 代入演算子を使用する式
x &= y
と同等です
x = x & y
ただし、x は 1 回だけ評価されます。& 演算子は、整数オペランドに対してビットごとの論理 AND 演算を実行し、bool オペランドに対して論理 AND 演算を実行します。
不要なときに y の評価を避けるには、次のようにします。
x = x && y
x の 2 回の評価を回避するには (これが何を意味するにせよ)、次を使用します。
x &= y
両方を組み合わせることはできません。
マイクロ最適化(少なくとも理論的なケースでは)、次のようになります。
if (x) x = y;
x がすでに である場合は、何もする必要はありませんfalse
。