Nullable<int> (int?) und +=

Na gut, vermutlich ist das ja ordentlich dokumentiert und ich war nur zu faul zum Suchen, aber hier mal eine kleine Erfahrung. Was erwartet man als Ergebnis von a += b; wenn a und b beide Nullable<int>, also int? sind?

Erst einmal ist der Code semantisch äquivalent zu a = a + b, also wird der Wert von a durch die Summe ersetzt – das ist in C# nur natürlich, liefert ja += für eine Zeichenkette auch eine neue Instanz, wenn die rechte Seite keine leere Zeichenkette ist.

Aber was ist denn nun a + b? Das Ergebnis ist null, wenn einer der Werte null ist und ansonsten wie zu erwarten die Summe der int Werte. Denkt man etwas darüber nach, kann es gar nicht anders sein, tut man das aber nicht (Nachdenken), ist man vielleicht überrascht, dass kein Fehler auftritt, sondern einfach eine null erscheint.

Beim Anschauen des tatsächlich erzeugten IL Codes ist mir auch die Methode Nullable.GetValueOrDefault aufgefallen, die ich vorher nur unterbewußt wahrgenommen habe. Bisher habe ich oft das Konstrukt a ?? 0 verwendet. Wenn allerdings der Rückfallwert der Defaultwerte des Datentyps ist (0, false, …), dann ist die Methode sehr viel effizienter.

Nur so Kleckerkram am Rande

Jochen

Bookmark the permalink.

Schreibe einen Kommentar