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
The
&&
operator has precedence over the?:
operator. So, when you evaluated it,b && x.HasPropC
has been evaluated to false, andb
was assigned with the valuex.PropB.Equals(obj.PropB)
.