Laden...

[gelöst] IF Bedingung nicht korrekt ausgewertet

Erstellt von Reggi vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.020 Views
R
Reggi Themenstarter:in
25 Beiträge seit 2016
vor 6 Jahren
[gelöst] IF Bedingung nicht korrekt ausgewertet

Hallo zusammen,

ich hoffe Jemand von euch hatte solch ein Problem auch schon.
Es ist irgendwie unlogisch und ich hoffe banal...

In einer IF-Bedingung wird die Anzahl Farben eines Artikels gezählt. Je nachdem, ob es mehr als eine gibt oder nicht, soll eben entweder die eine Funktion aufgerufen werden oder die andere.

Da das aber nicht funktioniert hatte, bin ich im Debugger auf das gestoßen, was man im Anhang sehen kann.
Die Bedingung ist eindeutig false und trotz dem wird der falsche Zweig ausgeführt.

Ich dachte erst, dass es vllt sein kann, dass die Count-Eigenschaft einen anderen Wert hat, als die Count()-Methode und habe das gerade geändert und getestet. Leider ohne Erfolg.

Was kann ich da noch versuchen? Oder besser WO kann ich noch suchen?

Liebe Grüße
Reggi

1.040 Beiträge seit 2007
vor 6 Jahren

Kann ich nicht nachstellen.
Wo kommt die Count()-Methode her, aus einer Erweiterung? Standardmäßig gibt es diese nämlich nicht. (Sorry, using fehlte.

16.806 Beiträge seit 2008
vor 6 Jahren

In der Condition wird die Eigenschaft verwendet; in der Schleife die Methode.
Das könnte sich also hier durchaus um eine Race Condition aufgrund erneuten Anstartens des Enumerators handeln.

Der Code sieht insgesamt ziemlich suspekt aus.
Wieso wird ständig irgendwas resolved? Das gehört sicherlich nicht im Mix in den Code.
Das ist nicht der Sinn von IoC.

Alternative alte Buildsymbols; mal das Projekt säubern während Visual Studio nicht gestartet ist - kommt vor.

O
79 Beiträge seit 2011
vor 6 Jahren

Vielleicht hilft ja auch ein simples Umladen in eine Variable.


int j=colours.Count;
if (j > 0)
{
   for (i=0; i<= j; i++)

R
Reggi Themenstarter:in
25 Beiträge seit 2016
vor 6 Jahren

Also erstmal danke an alle.

Ob man das jetzt Fehler nennen kann weiß ich nicht, aber beim weiter Debuggen ist das Programm dann doch in der Elsebedingung gelandet.

Also falscher Alarm und der Fehler selbst kommt davon, dass einige Daten, die ich importiert hatte, anders aufgebaut sind und so nicht mit den zwei Regeln abgefangen werden 😭.

Und Abt...
Ich hab das mit den Containern nur so halb übergeben bekommen von einem ehemaligen Kollegen. Ich muss zu meiner Schande gestehen, dass ich mich nicht gründlich in das Thema eingearbeitet habe.
Ich werde mir bei Gelegenheit mal ansehen, wie man die richtig benutzt. Danke für den Hinweis.

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

nur zum IoC mal als Grundüberlegung:
So wie du den IoC-Container verwendest - wird dieser quasi als new-Operator verwendet. Klingt zwar im ersten Moment ganz witzig - und funktioniert auch so im Code - hat aber den fatalen Nachteil, dass wenn jemand anders deine Klasse benutzt - derjenige absolut keinen Schimmer davon hat, dass du:
a) IoC einsetzt
b) Welche Klassen er im Container registriert haben müsste, damit eine Verwendung nicht in die Hose geht

Kurzum: Auf diese Art sorgst du dafür, dass du zwar Abhängigkeiten auf direkte Implementierungen vermeidest - bindest dich aber auf der anderen Seite an das IoC-Framework - und schlimmer - sorgst dafür, dass nicht einmal die Abhängigkeiten zu bestimmten Schnittstellen von außen ersichtlich sind und man den Code quasi nur per Trial&Error verwenden kann.

LG

3.003 Beiträge seit 2006
vor 6 Jahren

Zu dem, was Taipi88 grade sagte, noch ein wenig Lesestoff:

ServiceLocator is an anti-pattern

(Beim refactoring im Hinterkopf behalten)

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

R
Reggi Themenstarter:in
25 Beiträge seit 2016
vor 6 Jahren

Danke für die Infos.
Das wird sicher helfen. 😉