2016-12-16 2 views
1

Also habe ich an einem Programm gearbeitet und war ein wenig verwirrt über das Verhalten eines Listoperators. Ich habe eine Liste und wollte wissen, ob sie einen Eintrag nach bestimmten Kriterien enthält. Jetzt nennen wir es eine Liste und obj hat folgende Eigenschaften:C# List.Exists gibt true mit "false && true" zurück

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

Jetzt habe ich nur ein wahres Ergebnis wollte, wenn PROPA einem in der Liste gleich war und wenn die Eigenschaft in der Liste hat als ProPC sollte prüfen PropC, sonst PropB. benutzen ich dieses Stück Code dafür:

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; 
})) 

Nach der ersten Linie mit dem „PropA.Equals ...“ b auf false gesetzt wurde. Aber die Linie dahinter machte es wieder wahr. Es schien also so, als wäre da ein Objekt, auch wenn es nicht war. Ich habe eine Lösung dafür gefunden, die zweite Zeile nach dem & & -Operator in Klammern gewickelt, aber ich weiß immer noch nicht, warum es aus einem Falschen ein Wahres gemacht hat.

Können Sie mir einen Hinweis auf diese geben?

Danke.

+0

Sie müssen es ändern in 'b = b && (x.HasPropC? X.PropC.Equals (obj.PropC): x.PropB.Equals (obj.PropB));' Andernfalls ist es ANDing 'b' und 'x.HasPropC' und benutze das, um zu bestimmen, welcher Teil der Bedingung ausgeführt werden soll, und zu 'b' zuzuweisen. – juharr

Antwort

6

Im Ausdruck

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

Der && Operator Vorrang vor dem ?: Operator hat. Wenn Sie es ausgewertet haben, wurde b && x.HasPropC als falsch bewertet und b wurde mit dem Wert x.PropB.Equals(obj.PropB) zugewiesen.

+0

@HimBromBeere OP erklärte bereits, dass er es schaffte, das Problem zu lösen (indem er geschweifte Klammern verwendete, um die Vorrangstellung des Operators zu deaktivieren) und einfach nach einer Erklärung fragte, warum dies geschah. – matanso

Verwandte Themen