10

重複の可能性:
||= または &&= 演算子がないのはなぜですか?

全くの偶然で、私は今日それを知りました

 a &= GetBool();

と同じではありません

 a = a && GetBool();

私は何年もそれを誤解していたに違いありません。最初の例でGetBool()は、" a" が false であっても " " が実行されます。第二に、そうではありません。

C#で「&&=」のようなことを達成するものはありますか?

4

2 に答える 2

6

C#で「&&=」のようなことを達成するものはありますか?

まあ、あなたは書くことができます

a = a && getBool();

代わりに...正直なところ、実際に何か違うことをしたいと思う状況はあまり思いつきません。上記でもかなりまれです、IME。

&&||orに対して定義された複合代入演算子はありません??(これは明らかな「短絡」演算子です)。複合代入演算子の完全なリストについては、C# 4 仕様のセクション7.17を参照してください。

于 2012-05-09T09:39:06.350 に答える
4

ドキュメントから:

次のような &= 代入演算子を使用する式

x &= y

と同等です

x = x & y

ただし、x は 1 回だけ評価されます。& 演算子は、整数オペランドに対してビットごとの論理 AND 演算を実行し、bool オペランドに対して論理 AND 演算を実行します。

不要なときに y の評価を避けるには、次のようにします。

x = x && y

x の 2 回の評価を回避するには (これが何を意味するにせよ)、次を使用します。

x &= y

両方を組み合わせることはできません。

マイクロ最適化(少なくとも理論的なケースでは)、次のようになります。

if (x) x = y;

x がすでに である場合は、何もする必要はありませんfalse

于 2012-05-09T09:37:29.033 に答える