开发者

c# Assignment operator &=

开发者 https://www.devze.com 2023-02-21 17:52 出处:网络
if I have the following bool: 开发者_JAVA百科bool success = true; Will the following three lines of code store the same results in success:

if I have the following bool:

开发者_JAVA百科bool success = true;

Will the following three lines of code store the same results in success:

1 - success &= SomeFunctionReturningABool();

2 - success = success & SomeFunctionReturningABool();

3 - success = success && SomeFunctionReturningABool();

I found an article stating that 1 is a shortcut for 2 - but is 2 the same as 3 or is my application going to explode on execution of this line...


For boolean type, single & evaluates all operands, while double && only evaluates while necessary (i.e. if the first operand is false, it won't bother to evaluate the second one), also known as "short-circuit" evaluation.

Source: http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.80).aspx

As for the &= assignment operator, it works same as single &.


1 and 2 are the same in the same way that the following are the same:

int value += 1;
int value = value + 1;

3 is not the same, as if success is false, SomeFunctionReturningABool() won't get called - which is not what you want.


You are right. 1 is a shortcut to 2. The difference between '&' and '&&' you can find here msdn

'&' is a logical AND while '&&' is conditional AND


Options 2 and 3 are equivalent, and &= does exactly that.

You should know that if the first call fails, the subsequent calls might not occur: for example,

if (x != null && x.Test() == true)

It evaluates x != null first - and if it's false then the second part won't get executed. The same may apply here.

(Huh, I wonder if that's just for && and not &...)

0

精彩评论

暂无评论...
验证码 换一张
取 消