Einführung in C#
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);
o3 = "Hallo"; // o3 ist hier ein string s1 = o3 as string; // Ist o3 ein String? In diesem Fall ja! --> s1 = Hallo Console.WriteLine(s1);
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
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