Neu in C# 6 – Die Operatoren Null-Condentional und Null-Coalescing

 

In diesem kurzen Artikel möchte ich die Verwendung der in C# 6 neu hinzugekommenen Operatoren Null-Condentional (?.) und Null-Coalescing (??) demonstrieren. Die beiden neuen Operatoren sind kein Allheilmittel zur Durchführung von Prüfungen auf null-Werte. Jedoch ermöglichen diese eine kompaktere Schreibweise und damit die Reduzierung von zu schreibendem Code.

Im nachfolgenden ein Beispiel, wie man es in etwa bisher getan hat (und natürlich auch weiterhin tun kann)

string[] a = { „Hallo“, „Welt“, null, „!“ };
foreach(string s in a)
{
     if(s != null)
         
Console.WriteLine(s.ToUpper());
}

Mit dem Null-Conditional Operator lässt sich der Code auch so schreiben

string[] a = { „Hallo“, „Welt“, null, „!“ };
foreach(string s in a)
{
     Console.WriteLine(s?.ToUpper());
}

Der Null-Codential Operator kann überall dort eingesetzt werden, wo ein null-Wert zurückgeliefert werden kann. In obigem Beispiel wird mit ?. s auf null überprüft. Ist s != null, wird die Methode ToUpper() aufgerufen. Ist s == null, entfällt der Aufruf der Methode, aber es wird keine Exception ausgelöst.

Eine weitere Möglichkeit ist die Verwendung des Operators ?? (Null-Coalescing Operator). Das nachfolgende Beispiel funktioniert für s.? genauso wie oben erklärt. Allerdings wird aufgrund der Verwendung des Null-Coalescing Operators der String „null!!!“ zurückgeliefert, wenn s == null ist.

string[] a = { „Hallo“, „Welt“, null, „!“ };
foreach(string s in a)
{
     Console.WriteLine(s?.ToUpper() ?? „null!!!“);
}

Ohne Null-Condential und Null-Coalescing Operator wäre der Code auch hier etwas umfangreicher

string[] a = { „Hallo“, „Welt“, null, „!“ };
foreach(string s in a)
{
     if(s != null)
          Console.WriteLine(s.ToUpper());
    
else
         
Console.WriteLine(„null!!!“);
}

Der Null-Coalescing Operator kann auch separat verwendet werden. Auch in diesem Beispiel wird die Zeichenkette „null!!!“ zurückgeliefert, wenn s == null ist. Vereinfacht kann man sagen, dass der linke Operand zurückgeben wird, wenn es sich nicht um einen null-Wert handelt, ansonsten wird der rechte Operand zurückgeliefert.

string[] a = { „Hallo“, „Welt“, null, „!“ };
foreach(string s in a)
{
     Console.WriteLine(s ?? „null!!!“);
}

 

C# 6 – using static

Neues Feature in C# 6 – die using static Direktive

using static erlaubt das Importieren zwecks Zugriff auf statische Member eines Typs, z.B. für Klassen wie System.Console oder System.Math.

Nehmen wir mal ein Beispiel, wie man es bisher in etwa getan hat:

using System;

ConsoleColor tmpCol = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(„Menge: {0,-5:d}\tEinzelpreis: {1,-5}\tGesamt(inkl.MWSt): {2,10}“,
            menge, ePreis, menge * ePreis * (1 + mwst / 100));
Console.ForegroundColor = tmpCol;

Und jetzt das Ganze mit using static: Die using Direktive allein kann nur auf Namensräume angewandt werden, System.Console ist aber kein Namensraum, sondern ein Typ und daher ist die Direktive using static zu verwenden. Ebenso ist System.ConsoleColor kein Namensraum, sondern eine Enumeration.

using System;
using static System.Console;
using static System.ConsoleColor;

ConsoleColor tmpCol = ForegroundColor;
ForegroundColor = Green;
WriteLine(„Menge: {0,-5:d}\tEinzelpreis: {1,-5}\tGesamt(inkl.MWSt): {2,10}“,

               menge, ePreis, menge * ePreis * (1 + mwst / 100));
ForegroundColor = tmpCol;

Weitere Informationen finden sich auf den MSDN-Seiten unter using directive(C# Reference).

C# 6 – String Interpolation

String Interpolation – Neues Feature in C# 6

Während man in den Vorgängerversionen Zeichenketten (Strings) mit dem Operator + verkettet (Concatenation) oder die Formatierung mittels String.Format durchgeführt hat, lässt sich beides in C# 6 auch mit der dort eingeführten String-Interpolation komfortabel erledigen. Der Code wird dadurch besser lesbar und verringert Fehler. Zur Nutzung der String-Interpolation ist einem String-Literal ein Dollarzeichen ($) voranzustellen. Zu ersetzende Teile werden innerhalb des String-Literals in geschweifte Klammern eingefasst. Soll eine geschweifte Klammer selbst in der Zeichenkette auftauchen, muss diese doppelt angegeben werden (}} bzw. {{). Ebenfalls beim Verbatim String Literal lässt sich String-Interpolation nutzen, indem ein Dollarzeichen vorangestellt wird. Die String-Interpolation passiert während der Compilierung. Weitere Informationen finden sich auf den MSDN-Seiten unter Interpolated Strings(C# and Visual Basic Reference).