简体   繁体   中英

c# List.Exists returns true with “false && true”

So I was working on a Program and was a little bit confused about the behavior of a Listoperator. I have a List and wanted to know if it holds an entry according to some criterias. Now let's call it a List and obj has the following Properties:

public string PropA { get; set; }
public string PropB { get; set; }
public string PropC { get; set; }
public bool HasPropC { get; set; }

Now I only wanted a true result if PropA was equal to one in the list and if the property in the List has as PropC it should check PropC, otherwise PropB. I used this piece of code for it:

 if (List.Exists(x => {
       bool b = true;

       b = b && x.PropA.Equals(obj.PropA);
       b = b && x.HasPropC ? x.PropC.Equals(obj.PropC) : x.PropB.Equals(obj.PropB);

       return b;
}))

After the first line with the "PropA.Equals..." b was set to false. But the line beyond made it true again. So it seemed like there was an Object even it was not. I found a solution for it, I wrapped the second Line after the &&-Operator into brackets but I still don't know why it made out of a false a true.

Can you give me a hint on this one?

Thanks.

In the expression

b && x.HasPropC ? x.PropC.Equals(obj.PropC) : x.PropB.Equals(obj.PropB);

The && operator has precedence over the ?: operator. So, when you evaluated it, b && x.HasPropC has been evaluated to false, and b was assigned with the value x.PropB.Equals(obj.PropB) .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM