Wir haben beispielsweise drei Variablen des gleichen Typs, die wir miteinander multiplizieren möchten, von der jedoch eine nullable ist.
1: int a = 20;
2: int b = 30;
3: int? c = null;
4:
5: int? result = a * b * c;
Nun stellt sich die Frage, was bei der Berechnung als Ergebnis herauskommt.
Eine erste Annahme könnte sein, dass eine Exception geworfen wird. Das passiert jedoch nicht. Eine zweite Annahme könnte sein, dass anstatt null der Wert 0 angenommen wird. Auch das passiert nicht. Null ist nicht definiert, und somit kann kein bestimmter Wert angenommen werden – auch nicht 0.
Führen wir generell mathematische Operationen mit Variablen unterschiedlicher Typen durch, so ist das Ergebnis immer vom Typ des "größeren" Typs (int + long = long, etc.). Ist ein Typ davon jedoch Nullable
Dies gibt auch schon einen Hinweis auf das Ergebnis unserer Multiplikation: das Ergebnis ist null, sobald auch nur eine Variable null ist.
Eine funktionierende Variante des oben angegebenen Codes könnte folgendermaßen aussehen, sofern die Variable c nicht in die Berechnung mit eingehen soll, wenn sie null ist:
1: int? result = c.HasValue
2: ? (a * b * c.Value)
3: : (int?)(a * b);
Soll ein bestimmter Default-Wert verwendet werden, lässt sich dies folgendermaßen durchführen:
1: int result = a * b * c.GetValueOrDefault(1);
Bei mathematischen Berechnung mit über Nullable
Eine detaillierte Darstellung der Verarbeitung von Nullable-Typen findet sich hier.