Laden...

INotifyPropertyChanged - warum prüfen ob value = null?

Erstellt von GeneVorph vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.087 Views
G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 5 Jahren
INotifyPropertyChanged - warum prüfen ob value = null?

Hallo,

ich rätsele gerade über Folgendes:

für die korrekte Implementierung des INotifyPropertyChanged-Ereignisses im Setter eines Propertys (s. hier) heißt es:


private string _surname;
public string Surname
{
    get { return _surname; }
    set 
    {
        if (_surname != value) // IMP: you want to inform only if value changes
        {
          ...
           NotifyPropertyChanged(temp, _surname);
        }
    }
}


Was ich nicht ganz verstehe ist folgende Zeile:


 if (_surname != value)

Warum prüfen, ob _surname != value? Wenn ich im Debug hier einen Break-Point setze, dann ist _surname solange null, bis die Codezeile _surname = value kommt.

Ich dachte, OK, der Poster hat vlt. einen Fehler gemacht, schauste mal bei msdn. Aber auch dort, findet sich so etwas wie


 public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }

            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }

Lasse ich die Prüfung gegen null weg, scheint sich nichts zu ändern - mein privates Property ist zur Runtime auf jeden Fall null. Habe ich einfach nur ein schlechtes Beispiel aufgegabelt, oder sollte man tatsächlich VOR setzen eines Properties prüfen, ob das private Feld oder value null sind?

Grüße
Vorph

16.825 Beiträge seit 2008
vor 5 Jahren

Lasse ich die Prüfung gegen null weg

Du prüfst nicht gegen null, sondern gegen den bereits gesetzten Wert - das ist ein Unterschied.
Siehe auch das Kommentar; da ist der Sinn beschrieben:

// IMP: you want to inform only if value changes

T
2.221 Beiträge seit 2008
vor 5 Jahren

Und man will ja auch informiert werden, wenn der Wert zu oder von Null auf was anderes Wechselt.
Deshalb prüft man ob der aktuelle Wert vom neuen Wert abweicht und feuert dann das Event.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 5 Jahren

Aw - sorry! Ich habe mich mal wieder besonders doof angestellt. Ich habe obige Beispiele auf eigenen Code angewandt und mich ständig gewundert, warum da ständig auf den gesetzten Wert geprüft wurde, der bei mir aber jedesmal null war. Natürlich kam dann die Frage auf, wozu diese Abfrage überhaupt taugt - bei mir war z. B. _surname jedesmal null, bevor er durch value gesetzt wurde. Vorhin viel es mir dann wie Schuppen von den Augen: ich hatte vorher new Customer() drinne - und da ist der _surname - klar - erstmal null *facepalm

Ich verlasse die Arena mit schamgesenktem Haupt...

T
2.221 Beiträge seit 2008
vor 5 Jahren

Jeder macht mal Fehler 😃
Lass dich davon nicht gleich aus dem Tritt bringen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.