Neu in .NET 10.0 [9]: Null-Conditional Assignment in C# 14.0

Entwicklerinnen und Entwickler können nun eine Zuweisung an eine Eigenschaft vornehmen, ohne vorher zu prüfen, ob das Objekt null ist.

vorlesen Druckansicht 2 Kommentare lesen
Schild mit Schriftzug C#

(Bild: Pincasso / Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Neben den bisher in dieser Blogserie aufgeführten Sprachelementen gibt es ein weiteres sehr hilfreiches neues Sprachkonstrukt in C# 14.0, das Microsoft „Null-Conditional Assignment“ nennt. Damit können Entwicklerinnen und Entwickler eine Zuweisung an eine Eigenschaft vornehmen, ohne vorher zu prüfen, ob das Objekt null ist.

Der Dotnet-Doktor – Holger Schwichtenberg
Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Anstelle von

if (meineWebsite != null)
{
  meineWebsite.Url = "https://www.IT-Visions.de";
  meineWebsite.Url = meineWebsite.Url.ToLower();
  meineWebsite.Counter += 1;
}

darf man nun verkĂĽrzt mit dem Fragezeichen vor dem Punkt (?.) ohne if schreiben:

meineWebsite?.Url = "https://www.IT-Visions.de";
meineWebsite?.Url = meineWebsite.Url.ToLower();
meineWebsite?.Counter += 1;

Das fĂĽhrt zur Laufzeit zu keinem Fehler. Allerdings passiert auch rein gar nichts, falls die Variable meineWebsite den Wert null besitzt.

Die Variante

meineWebsite?.Owner.Name = "IT-Visions";
Console.WriteLine("Owner: " + meineWebsite?.Owner.Name);

funktioniert, wenn Website null ist. Aber nicht, wenn Website != null und Owner = null. Dann braucht man:

meineWebsite?.Owner?.Name = "IT-Visions";
Console.WriteLine("Owner: " + meineWebsite?.Owner?.Name);

Das Null-Conditional Assignment ist auch bei einem Indexer erlaubt:

Website[] websites = …;
websites?[0]?.Url = "https://www.IT-Visions.de";

(rme)