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.
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