Hallo Gemeinde,
habe in div Setter-Methoden folgende Implikation:
if (value!=titel)
{
titel=value;
logPropertyname("Titel");
}
nun jedoch mein Problem:
Wenn ich an das Property Titel seinen eigenen Wert übergebe oder auch die gleiche Zeichenkette wie sie bereits in dem Member gespeichert ist übergebe, erhalte ich beim Debuggen für den Operator den Wert "false", es wird jedoch der Block des "true"-Pfades abgearbeitet.
Kennt jemand das Problem, welches sind die Ursachen und wie kann ich diese umgehen?
Grüße
Bigeddie
Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉
Hallo,
Strings müssen immer mit .Equals() verglichen werden, ansonsten vergleichst Du die Adressen und nicht die Werte.
Hi Rahvin,
die Links sagen etwas anderes:
Oder verstehe ich da was falsch?
Grüße
Bigeddie
Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉
Strings müssen immer mit .Equals() verglichen werden, ansonsten vergleichst Du die Adressen und nicht die Werte.
Nein, das stimmt nicht.
Testweise kannst du es aber trotzdem mal probieren (also Vergleich via String.Equals) - evtl. liegt's am Immediate Window. Glaube ich aber eigentlich auch nicht.
Hallo Rahvin,
Strings müssen immer mit .Equals() verglichen werden, ansonsten vergleichst Du die Adressen und nicht die Werte.
das stimmt für C# nicht.
Hallo bigeddie,
wenn der Then-Teil ausgeführt wird, dann liefert die Bedingung offensichtlich true.
herbivore
Strings müssen immer mit .Equals() verglichen werden, ansonsten vergleichst Du die Adressen und nicht die Werte.
nein. das ist nur bei objecten so, die die == und != opertoren nicht überschreiben.
mit echten System.String's solltest du kein solches problem haben
var foo1 = "foo";
var foo2 = new string(new char[] { 'f', 'o', 'o' });
Console.WriteLine(foo1 == foo2);
Console.WriteLine(foo1 == "foo");
Ups, das war eindeutig 😃.
Dann sorry für meine Aussage, dass ist dann leider noch ein Javaüberbleibsel...
da wirft man manchmal etwas durcheinander 😉...
Sorry nochmals...
Hi herbivore,
wenn ich einen Break-Point im Then-Teil setze und dann den Operator untersuche, dann erhalte ich für den Ausdruck FALSE, der Then-Teil dürfte also garnicht tangiert werden oder liege ich da falsch?
Grüße
Bigeddie
Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉
Hallo bigeddie,
wenn der der Breakpoint im Then-Teil erreicht wird, dann hast du doch den Beweis, dass die Bedingung true geliefert hat.
herbivore
Hi herbivore,
da liegt ja mein Prob, die condition lautet auf (value!=titel) und das liefert mir FALSE, wenn ich die Bedingung vor der Abarbeitung der ersten Zeile im Then-Teil überprüfe, also noch keine Änderungen an irgendwelchen Membern vollzogen sind.
Mit value.equals schein es zu funktioniren, aber warum nicht mit dem Operator und auch nur an dieser Stelle?
Grüße Bigeddie
Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉
ersetz mal dein if(value != title)
durch
bool b1 = value != title;
bool b2 = !value.Equals(title);
if(b1 && b2)
dann kannst du im debugger mal schauen, ob b1
und b2
in deinem fall beide true
sind; also value
wirklich ungleich title
Hi,
also nach langem Probieren habe ich den Code nochmal in eine äquivalente Klasse gepackt und die alte Klasse entsorgt und in der neuen Klasse funktioniert der Code wie ich ihn in der ersten Implementierung hatte problemlos.
Dachte, soetwas wäre nur bei Delphi möglich.
Grüße bigeddie
Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉