开发者

Do I understand this right? Comparing and assigning in one line of code?

开发者 https://www.devze.com 2023-01-22 19:54 出处:网络
Can someone tell me if I understand this right. private void SetFontWeight(FontWeight weight) { boldButton.IsChecked = weight == FontWeights.Bold;

Can someone tell me if I understand this right.

  private void SetFontWeight(FontWeight weight)
        {
            boldButton.IsChecked = weight == FontWeights.Bold;
        }

Like what 开发者_StackOverflow社区is getting me is how everything is in one line. Like they are comparing and then assigning.

So is there like some order. Logically it seems like it would be like

 boldButton.IsChecked = (weight == FontWeights.Bold);

Is that correct it first does comparison then assigns?

Or I guess the long way would be

if(weight == FontWeights.Bold)
{
     boldButton.IsChecked = true;
}
else
{
   boldButton.IsChecked = false;
}

I also find it kinda weird that they are comparing a struct(FontWeights) to a Class. I would have though it would be like

weight.IsBold == FontWeights.Bold


Yup, equality comparison has higher precedence than assignment. Assignment has basically the lowest precedence, so just about any other operators will be executed before assignment happens.


I'm pretty certain that it's equivalent to

boldButton.IsChecked = (weight == FontWeights.Bold);

This sort of thing was inherited from C (originally) and it has to use parentheses to force assignment first:

if ((x = getcode()) == BAD_CODE) ...

In terms of your misgivings over the comparison, this is just one of the wonderful things that become possible when you're allowed to override comparison operators.

In fact, some would argue that this example makes more sense since you shouldn't have to worry about whether it's the IsBold property that you have to compare. The clas should (and does) figure that out because you're comparing it in a "boldness" sort of way :-)



As far as my understanding is concerned, equality checks will be performed first. No matter you put brackets or not.
Sample code;

public boolean SampleFunction()
{
int a = 1;
int b = 2;
boolean c= false;
c= a==b;
return c;
}

This will first check if a is equal to b. So it will return boolean value and assign it to c.

0

精彩评论

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