Microsoft Connect() 2018: Preview von C# 8.0 mit drei neuen Sprachfeatures

Im Rahmen von Visual Studio 2019 Preview 1 liefert Microsoft auch erste neue Features von C# 8.0.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Microsoft Connect() 2018: Preview von C# 8.0 mit drei neuen Sprachfeatures
Lesezeit: 2 Min.
Von
  • Dr. Holger Schwichtenberg

Durch die Installation von der ersten Preview von Visual Studio 2019 erhalten Softwareentwickler auch eine Beta-Version des C#-Compilers in der Version 2.11. Diese enthält bereits drei neue Sprachfeatures von C#.

Die wichtigste Änderung sind dabei die Nullable Reference Types, die C#-Produktmanager Mads Torgersen schon im September 2017 angekündigt hatte. heise Developer zeigte im Mai dieses Jahres ein Beispiel anhand des damals auf Github verfügbaren Quellcodes des Compilers.

Nach einigen Diskussionen über die Frage, ob diese neue Prüfung, die NullReference-Laufzeitfehler verhindern kann, im Standard aktiv sein soll, hat sich Microsoft sich nun entschlossen, dass eine Aktivierung notwendig ist. In einem Video von Microsofts Connect();-Konferenz zeigt Mads Torgersen, wie Softwareentwickler dies mit dem Ausdruck #nullable enable auf Dateiebene aktivieren.

Null-Prüfung für Referenztypen in C# 8.0

Torgersen erwähnt aber auch, dass diese Einstellung auch auf Projektebene möglich sein soll. In dem entsprechenden Eintrag auf GitHub fehlt aber die Information, wie dies in den Projekteinstellungen erreicht werden kann.

Von den am 12. November 2018 angekündigten weiteren neuen Funktionen sind in der aktuellen Beta-Version des Compilers nur die asynchronen Streams sowie Indexe und Ranges enthalten, mit denen man auf prägnante Weise eine Teilmenge einer Menge definieren kann.

string[] Namen = { "Leon", "Hannah", "Lukas", "Anna", "Leonie", "Marie", "Niklas", "Sarah", "Jan", "Laura", "Julia", "Lisa", "Kevin" };
string[] t1 = Namen[1..3]; // zweiter und dritter: "Hannah", "Lukas"
string[] t2 = Namen[6..^4]; // sechs von vorne und vier hinten abschneiden: "Niklas", "Sarah", "Jan"
string t3 = Namen[^2]; // zweiter von hinten = "Lisa"

System.Range r1 = 1..3;// neue Klasse System.Range
string[] t4 = Namen[r1]; // zweiter und dritter: "Hannah", "Lukas"

Index i2 = ^2; // neue Klasse System.Index
string t5 = Namen[i2]; // zweiter von hinten = "Lisa"

Wie angekündigt, funktionieren Indizes und Ranges sowie asynchrone Streams lediglich in .NET-Core-Anwendungen, nicht in klassischen .NET Framework-Anwendungen, da diese Klassen zum .NET Standard 2.1 gehören werden, der nicht auf .NET Framework verfügbar gemacht werden soll. (ane)