Laden...

Zuweisung nur, wenn nicht null

Erstellt von joh.w vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.098 Views
J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 13 Jahren
Zuweisung nur, wenn nicht null

Hi,

ich hab ne ganze Reihe von Feldern, die ich befüllen muss. Der Wert, der jeweils gefüllt wird, wird von einer Methode zurückgegeben. Allerdings will ich jetzt meine Felder nur dann befüllen, wenn der Rückgabewert nicht NULL ist um ein Default-behavior zu haben.

Normalerweise würde ich das dann so schreiben:


string temp; // Kann irgendein Typ sein, in dem Beispiel halt string
if ((temp = callSomeMethod("identifier1")) != null)
{
  MyField1 = temp;
  temp = null;
}
if ((temp = callSomeMethod("identifier2")) != null)
{
  MyField2 = temp;
  temp = null;
}
// usw.

Geht das kürzer?

joh.w

Edith:
Sowas kann ich in meinem Fall nicht anwenden


MyField1 = callSomeMethod("identifier1") ?? MyField1;

Das würde mir von der Logik die hinter manchen Properties steht was durcheinander wirbeln.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo joh.w,

vielleicht nicht ganz genau, wie du es dir vorgestellt hast, aber so würde es gehen:

MyField1 = callSomeMethod("identifier1") ?? myField1Default;

Siehe auch Kanntet ihr den ??-Operator? [null coalescing-Operator].

EDIT:

OK, oder

MyField1 = callSomeMethod("identifier1") ?? MyField1;

je nachdem, was genau man erreichen will.

Das würde mir von der Logik die hinter manchen Properties steht was durcheinander wirbeln.

Eigentlich sollten Properties aber damit klarkommen, wenn der gleiche Wert nochmal gesetzt wird.

herbivore

1.002 Beiträge seit 2007
vor 13 Jahren

Hallo joh.w,

du kannst den ??-Operator (s. Operator ?? (C#-Referenz)) dafür verwenden:

Der ??-Operator gibt den linken Operanden zurück, falls dieser nicht NULL ist. Andernfalls wird der rechte Operand zurückgegeben.

MyField1 = temp ?? /* Default-Wert hier einsetzen */;

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

5.299 Beiträge seit 2008
vor 13 Jahren

ich würds halt kürzer schreiben:


         string temp = callSomeMethod("identifier1");
         if(temp!= null)   MyField1 = temp;

Wenn dir das immer noch zu lang ist, und callSomeMethod() immer dieselbe ist, nur mit anderen IDs, dann könntest du MyField1 auch ref dort hineingeben, und's wird darinnen gesetzt:


TrySetMyField("identifier1", ref MyField1);

Der frühe Apfel fängt den Wurm.

J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 13 Jahren

ich würds halt kürzer schreiben:

  
         string temp = callSomeMethod("identifier1");  
         if(temp!= null)   MyField1 = temp;  

Stimmt. Denke, so werde ich es auch machen.

@herbivore:
Die Felder (bzw. Properties) die ich beschreibe enthalten neben dem Wert der gesetzt wird auch noch einen Zeitstempel. Anhand von dem kann ich auswerten ob ich den Wert aktualisieren muss oder nicht. Würde ich immer die Default-Werte beschreiben, würde ich mir evtl. vorher gültige zunichte machen und auch nicht herausfinden können, wie lange es schon keine Synchronisierung mehr gab. Von daher gefällt mir das oben genannte schon besser.

Dachte halte es gäbe was wie


MyField1 ?= callSomeMethod("identifier1");

5.299 Beiträge seit 2008
vor 13 Jahren

wie findste den?


         if((temp = callSomeMethod("identifier1")) != null) MyField1 = temp;

Der frühe Apfel fängt den Wurm.

J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 13 Jahren

Jau. Genau den hab ich jetzt implizit angewendet. Ich versuch mir grad nur selbst zu erklären, warum ich versucht hab, temp wieder zu nullen.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo joh.w,

Würde ich immer die Default-Werte beschreiben, würde ich mir evtl. vorher gültige zunichte machen

ich habe ja zwei verschiedene Varianten genannt, jenachdem, was genau man erreichen will.

herbivore