Spezielle Operatoren in C#

Bedingungsoperatoren und typeof()

Hier werden spezielle Operatoren wie is, as, (cast), typeof(), ?:, ?? in Beispielen vorgestellt:

 

Der is Operator

/* Der Operator "is" prüft zur Laufzeit, ob der Inhalt einer Variablen ein entsprechender Datentyp ist oder nicht */
object o1 = 5;              // Ein int
object o2 = "Hallo";        // Ein string

bool b1 = (o1 is string);   // Ist o1 ein string?
bool b2 = (o2 is string);   // Ist o2 ein string?
bool b3 = (o1 is int);      // Ist o1 ein int?
bool b4 = (o2 is int);      // Ist o2 ein int?

Console.WriteLine(b1);      // false
Console.WriteLine(b2);      // true
Console.WriteLine(b3);      // true
Console.WriteLine(b4);      // false

 

Der as Operator

/* Eine performantere Abfrage als "is" ist der "as" Operator */
/* Bei einem verbotenen cast wie z.B. "string in int" wird mit dem "as" Operator der Wert NULL zurückgegeben */
object o3 = 14;             // o3 ist hier ein int
string s1 = o3 as string;   // Ist o3 ein String? In diesem Fall nein! --> s1 = NULL
Console.WriteLine(s1);

as Operator

 

o3 = "Hallo";               // o3 ist hier ein string
s1 = o3 as string;          // Ist o3 ein String? In diesem Fall ja! --> s1 = Hallo
Console.WriteLine(s1);

as Operator


 

Der typeof() Operator

/* Gibt zur Laufzeit die Metainformationen (system.type opject) eines Datentyps zurück. 
 * Denn für jeden Typ in C# gibt es ein passendes System.Type Objekt
 * Da die Metainformationen sehr umfangreich sind (siehe Intellisense bzw. Debugging), werden hier nur drei vorgestellt */

Type t = typeof(string);
Console.WriteLine(t.FullName);  // Abfrage des kompletten Names --> System.String
Console.WriteLine(t.IsPublic);  // Abfrage ob der Typ public ist --> true
Console.WriteLine(t.Namespace); // Abfrage nach dem Namespace --> System

 typeof Operator


 

Der Bedingungsoperator ?

/* Der Bedingungsoperator "?" entspricht einer verkürzten if-else-Schreibweise
 * Bedingung ? Ausdruck1 : Ausdruck2
 * Wenn Bedingung = true, führe Ausdruck1 aus, ansonsten Ausdruck2   
 */

string x = 10 < 5 ? "ist kleiner" : "ist größer";
Console.WriteLine(x); // --> ist größer

string y = 2 < 5 ? "ist kleiner" : "ist größer";
Console.WriteLine(y); // --> ist kleiner

Der Bedingungsoperator ??

/* Der Operator "??" prüft auf NULL */

int? x = null;          // Der Datentyp int? darf null beinhalten! (int x = null; kann nicht in ein int convertiert werden)
int? y = 0;

int i = x ?? -1;        // Abfrage: Wenn x = NULL --> -1 zurückgeben, ansonsten x zurückgeben
int j = y ?? -1;        // Abfrage: Wenn y = NULL --> -1 zurückgeben, ansonsten y zurückgeben
Console.WriteLine(i);   // --> -1
Console.WriteLine(j);   // -->  0