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.