Zum Fußzeileninhalt springen
.NET HILFE

C# AS (Wie es für Entwickler funktioniert)

Programmieren in C# beinhaltet oft die Arbeit mit verschiedenen Datentypen. Manchmal müssen wir überprüfen, ob ein object von einem bestimmten Typ ist oder versuchen, ihn in diesen Typ zu konvertieren. An dieser Stelle kommt das as-Operator-Schlüsselwort ins Spiel. Zusammen mit seinem nahen Verwandten unterstützt der is-Operator bei Typentests und Konvertierungen. In diesem Tutorial werden wir die Feinheiten dieses Operators und seine Anwendungsfälle erkunden.

Verständnis des as-Operators

Grundlagen des as-Operators

Das as-Operator-Schlüsselwort in C# ist ein binärer Operator, der verwendet wird, um bestimmte Konvertierungen zwischen kompatiblen Referenztypen oder Nullable-Typen durchzuführen. Der folgende Code bietet eine einfache Demonstration:

// Declare an object that holds a string
object myObj = "Hello, World!";

// Use the 'as' operator to attempt to convert 'myObj' to a string
string myStr = myObj as string;

// myStr will hold the string value "Hello, World!" if the conversion is successful;
// otherwise, it will be null.
// Declare an object that holds a string
object myObj = "Hello, World!";

// Use the 'as' operator to attempt to convert 'myObj' to a string
string myStr = myObj as string;

// myStr will hold the string value "Hello, World!" if the conversion is successful;
// otherwise, it will be null.
$vbLabelText   $csharpLabel

Im obigen Code ist myObj ein Objekt des Typs object (der Basistyp für alle Typen in C#). Wir sind uns des zugrunde liegenden Typs zur Kompilierzeit unsicher. Der as-Operator wird verwendet, um zu versuchen, myObj als string zu behandeln. Wenn erfolgreich, wird myStr den Zeichenfolgenwert enthalten. Andernfalls wird es einen null-Wert enthalten.

Unterscheidet sich von Explicit Cast?

Während sowohl der as-Operator als auch der explizite Cast ähnliche Zwecke erfüllen, gibt es einen wesentlichen Unterschied. Wenn ein expliziter Cast fehlschlägt, wird eine Ausnahme ausgelöst. Andererseits, wenn der Versuch des as-Operators, von einem Typ zu einem anderen zu konvertieren, fehlschlägt, gibt der Operator einen null-Wert zurück, anstatt eine Ausnahme auszulösen. Lassen Sie uns das mit dem folgenden Codebeispiel verstehen:

object someValue = 12345;
string castResult;

// Using explicit cast
try {
    castResult = (string)someValue; // This will throw an exception since the cast fails.
}
catch(Exception ex) {
    castResult = null; // The result is set to null if an exception is caught.
}

// Using the 'as' operator
string asResult = someValue as string; // No exception, but 'asResult' will be null since the cast fails.
object someValue = 12345;
string castResult;

// Using explicit cast
try {
    castResult = (string)someValue; // This will throw an exception since the cast fails.
}
catch(Exception ex) {
    castResult = null; // The result is set to null if an exception is caught.
}

// Using the 'as' operator
string asResult = someValue as string; // No exception, but 'asResult' will be null since the cast fails.
$vbLabelText   $csharpLabel

Wie ersichtlich, kann die Verwendung des as-Operators oft sicherer sein, da Sie potenzielle Laufzeitfehler vermeiden.

Die Verbindung mit dem is-Operator

Oft wird der as-Operator zusammen mit dem is-Operator verwendet, um Typentests durchzuführen, bevor versucht wird, eine Konvertierung durchzuführen. Der is-Operator überprüft, ob das bereitgestellte Objekt vom angegebenen Typ ist, und gibt true zurück, wenn es so ist, andernfalls gibt er false zurück.

Das folgende Codebeispiel veranschaulicht dies:

object testObject = "This is a string";

// Check if testObject is of type string
if (testObject is string) {
    // If true, convert testObject to string using 'as'
    string result = testObject as string;
    Console.WriteLine(result); // Outputs: This is a string
} else {
    Console.WriteLine("Not a string");
}
object testObject = "This is a string";

// Check if testObject is of type string
if (testObject is string) {
    // If true, convert testObject to string using 'as'
    string result = testObject as string;
    Console.WriteLine(result); // Outputs: This is a string
} else {
    Console.WriteLine("Not a string");
}
$vbLabelText   $csharpLabel

Mit der Einführung des Pattern Matching in späteren Versionen von C# kann der is-Operator auch bestimmte Aktionen ausführen, wenn der Typentest bestanden wird. Dies reduziert oft die Notwendigkeit, den as-Operator zu verwenden.

Tiefer eintauchen: Sonderfälle und Überlegungen

Nullbare Werttyp-Konvertierungen

Einer der speziellen Fälle, in denen der as-Operator von unschätzbarem Wert ist, ist bei Nullable-Wertetypen. Wertetypen (wie int, double usw.) können keinen null-Wert zugewiesen bekommen. Indem Sie sie jedoch nullable machen, können Sie ihnen null zuweisen. Der as-Operator kann verwendet werden, um eine Konvertierung zu einem Nullable-Wertetyp zu versuchen:

// Declare a nullable integer
int? nullableInt = 10;

// Box the nullable int
object objInt = nullableInt;

// Attempt to unbox using 'as' to a nullable int type
int? resultInt = objInt as int?;
// Declare a nullable integer
int? nullableInt = 10;

// Box the nullable int
object objInt = nullableInt;

// Attempt to unbox using 'as' to a nullable int type
int? resultInt = objInt as int?;
$vbLabelText   $csharpLabel

Referenzkonversionen und benutzerdefinierte Konversionen

Der as-Operator unterstützt sowohl Referenzkonvertierungen (zwischen verwandten Referenztypen) als auch benutzerdefinierte Konvertierungen. Benutzerdefinierte Konvertierungen sind die Konvertierungen, die unter Verwendung spezieller Konvertierungsmethoden in Ihren Klassen definiert werden.

Betrachten Sie den folgenden Code für eine benutzerdefinierte Konvertierung:

class Sample {
    // Define an implicit conversion from Sample to string
    public static implicit operator string(Sample s) {
        return "Converted to String";
    }
}

Sample sampleObject = new Sample();

// Use 'as' to convert 'sampleObject' to string
string conversionResult = sampleObject as string;

// conversionResult will hold "Converted to String"
class Sample {
    // Define an implicit conversion from Sample to string
    public static implicit operator string(Sample s) {
        return "Converted to String";
    }
}

Sample sampleObject = new Sample();

// Use 'as' to convert 'sampleObject' to string
string conversionResult = sampleObject as string;

// conversionResult will hold "Converted to String"
$vbLabelText   $csharpLabel

Hier ermöglicht die benutzerdefinierte Konvertierungsmethode, dass ein Objekt vom Typ Sample als string behandelt wird.

Wenn as nicht zutrifft

Denken Sie daran, dass der as-Operator nicht mit Wertetypen verwendet werden kann (es sei denn, es handelt sich um Nullable-Wertetypen) oder mit benutzerdefinierten Konvertierungen, die eine explizite Methode beinhalten.

Fortgeschrittene Szenarien mit dem as-Operator

Boxing und Unboxing mit as

Boxing ist der Prozess der Umwandlung einer Werttypinstanz in eine Objekt-Referenz. Dies ist möglich, weil jeder Wertetyp implizit von einem object erbt. Wenn Sie einen Wertetyp boxen, verpacken Sie ihn in einem object.

Betrachten Sie den folgenden Code für Boxing-Konvertierungen:

int intValue = 42;

// Box the value type to an object
object boxedValue = intValue;
int intValue = 42;

// Box the value type to an object
object boxedValue = intValue;
$vbLabelText   $csharpLabel

Hier wird der intValue in einen object ge-boxt.

Unboxing ist der umgekehrte Prozess des Boxens, d.h. das Extrahieren des Wertetyps aus dem object. Der as-Operator kann verwendet werden, um Werte sicher zu entboxen, insbesondere wenn Sie nicht sicher sind, ob der object den Wertetyp hält, den Sie erwarten. Wenn das Unboxing nicht erfolgreich ist, wird das Ergebnis des Ausdrucks null sein.

Betrachten Sie das folgende Beispiel für Unboxing-Konvertierungen:

object obj = 42;

// Attempt to unbox using 'as' to a nullable int type
int? result = obj as int?;
object obj = 42;

// Attempt to unbox using 'as' to a nullable int type
int? result = obj as int?;
$vbLabelText   $csharpLabel

Arbeiten mit Arrays

Arrays sind Referenztypen in C#. Manchmal müssen Sie möglicherweise prüfen, ob ein object eine bestimmte Art von Array ist und dann damit arbeiten. Der as-Operator kann auch hier helfen.

Betrachten Sie den folgenden Code:

object[] arrayObject = new string[] { "one", "two", "three" };

// Attempt to cast to a string array using 'as'
string[] stringArray = arrayObject as string[];

// stringArray will hold the array of strings if successful
object[] arrayObject = new string[] { "one", "two", "three" };

// Attempt to cast to a string array using 'as'
string[] stringArray = arrayObject as string[];

// stringArray will hold the array of strings if successful
$vbLabelText   $csharpLabel

Im obigen Code ist arrayObject ein Array von Objekten, das tatsächlich Zeichenfolgen enthält. Mit dem as-Operator können Sie versuchen, es sicher als ein Array von Zeichenfolgen zu behandeln.

as mit LINQ kombinieren

Language Integrated Query (LINQ - Microsoft-Dokumentation) ist eine leistungsstarke Funktion in C#, die es Ihnen ermöglicht, Sammlungen in einer SQL-ähnlichen Weise abzufragen. Manchmal erhalten Sie Objekte gemischter Typen in einer Sammlung und möchten spezifische Typen herausfiltern. Hier kann der as-Operator sehr hilfreich sein.

Zum Beispiel, betrachten Sie eine Liste von Objekten, die sowohl Strings als auch Ganzzahlen enthält. Wenn Sie nur die Zeichenfolgen abrufen möchten, könnten Sie den as-Operator in Kombination mit LINQ verwenden:

var mixedList = new List<object> { "Hello", 42, "World", 100 };

// Use LINQ to select only strings from mixedList
var stringValues = mixedList
    .Select(item => item as string)
    .Where(item => item != null)
    .ToList();

// stringValues will contain "Hello" and "World"
var mixedList = new List<object> { "Hello", 42, "World", 100 };

// Use LINQ to select only strings from mixedList
var stringValues = mixedList
    .Select(item => item as string)
    .Where(item => item != null)
    .ToList();

// stringValues will contain "Hello" and "World"
$vbLabelText   $csharpLabel

Integration mit Iron Suite

Iron Suite Solutions for C# Developers ist eine Suite von hochwertigen Tools, die C#-Entwickler befähigen, Funktionen wie die PDF-Manipulation, Excel-Bearbeitung, Zeichen-Optische Erkennung (OCR) und Barcode-Erzeugung und -Lesen nahtlos zu integrieren. Diese Werkzeuge, wie unsere frühere Diskussion über die as- und is-Operatoren, sind entscheidend, um die Effizienz eines Entwicklers bei der Erstellung robuster Anwendungen zu steigern.

IronPDF

C# AS (How It Works For Developers) Abbildung 1 - IronPDF for .NET: Die C# PDF-Bibliothek

IronPDF ermöglicht es Entwicklern, PDF-Dateien innerhalb ihrer C#-Anwendungen zu erzeugen, zu manipulieren und zu lesen. In Bezug auf unser Thema, nehmen wir an, Sie hatten einen Referenztyp, der einige Daten enthält, und Sie wollten diese Daten in einen Bericht oder ein Dokument umwandeln. IronPDF kann die Ausgabe Ihrer Anwendung nehmen und sie in ähnlicher Weise wie die Typkonvertierung in ein gut formatiertes PDF-Dokument übersetzen.

IronXL

C# AS (How It Works For Developers) Abbildung 2 - IronXL for .NET: Die C# Excel-Bibliothek

Der Umgang mit Excel-Dateien ist in vielen Softwareanwendungen eine häufige Anforderung. IronXL for Excel Operations bietet Entwicklern die Möglichkeit, Excel-Tabellen zu lesen, zu bearbeiten und zu erstellen, ohne auf Office-Interop angewiesen zu sein. Im Kontext unserer Diskussion über Typkonvertierungen können Sie IronXL als Werkzeug verstehen, das es ermöglicht, Datenstrukturen oder Datenbankeinträge in C# nahtlos in Excel-Formate zu konvertieren.

IronOCR

C# AS (How It Works For Developers) Abbildung 3 - IronOCR for .NET: Die C# OCR-Bibliothek

Optical Character Recognition with IronOCR ist ein optisches Zeichenerkennungstool, das es Entwicklern ermöglicht, Text aus Bildern zu lesen und zu interpretieren. In Verbindung mit unserem Tutorial ist es vergleichbar mit der Konvertierung eines object (in diesem Fall eines Bildes) in einen spezifischeren Typ (string oder Textdaten) unter Verwendung fortschrittlicher Erkennungsmöglichkeiten.

IronBarcode

C# AS (How It Works For Developers) Abbildung 4 - IronBarcode for .NET: Die C# Barcode-Bibliothek

In vielen kommerziellen Anwendungen ist der Umgang mit Barcodes unerlässlich. IronBarcode Tool for Barcode Processing unterstützt Entwickler beim Erzeugen, Lesen und Dekodieren von Barcodes in C#-Anwendungen. Im Hinblick auf unsere Diskussion über Typkonvertierungen kann IronBarcode als ein Werkzeug betrachtet werden, das visuelle Barcode-Daten (eine Form von object) in spezifischere, brauchbare Datentypen wie Zeichenfolgen oder Produktdetails übersetzt.

Abschluss

C# AS (How It Works For Developers) Abbildung 5 - Iron Suite for .NET

Jedes Produkt innerhalb der Iron Suite Offerings ist ein Zeugnis für die Flexibilität und Leistungsfähigkeit, die C# bietet, insbesondere wenn es in unsere Diskussion über Typkonvertierungen und Typprüfungen einfließt. Diese Werkzeuge, wie die as- und is-Operatoren, bieten Entwicklern die Möglichkeit, Daten effizient zu konvertieren und zu verarbeiten.

Wenn Sie erwägen, eines dieser Tools in Ihre Projekte zu integrieren, ist es erwähnenswert, dass jede Produktlizenz bei $799 beginnt und jedes Produkt eine kostenlose Testversion der Iron Suite Tools anbietet. Für diejenigen, die nach einer umfassenden Lösung suchen, bietet Iron Suite ein verlockendes Angebot: Sie können die Iron Suite-Lizenz zum Preis von nur zwei Produkten erwerben.

Häufig gestellte Fragen

Welche Rolle spielt der 'as'-Operator in der C#-Entwicklung?

Der 'as'-Operator in C# wird verwendet, um sichere Typkonvertierungen zwischen kompatiblen Referenztypen oder nullbaren Typen durchzuführen. Wenn die Konvertierung fehlschlägt, wird null zurückgegeben, wodurch Ausnahmen vermieden werden.

Wie können Sie Typkonvertierungen in C# sicher handhaben?

Sie können den 'as'-Operator für sichere Typkonvertierungen verwenden, da er null statt einer Ausnahme zurückgibt, wenn die Konvertierung fehlschlägt, was ihn sicherer macht als explizites Casting.

Warum wird der 'as'-Operator in bestimmten Szenarien dem expliziten Casting vorgezogen?

Der 'as'-Operator wird bevorzugt, wenn Sie Ausnahmen vermeiden möchten, die durch fehlgeschlagene Konvertierungen verursacht werden. Er gibt null statt einer Ausnahme zurück, im Gegensatz zum expliziten Casting.

Wie funktioniert der 'as'-Operator mit nullable Typen in C#?

Der 'as'-Operator kann mit nullable Typen verwendet werden, wodurch eine sichere Konvertierung ermöglicht wird, die null zurückgibt, wenn das Objekt nicht in den angegebenen nullable Typ konvertiert werden kann.

Wie kann IronPDF in C# für die Dokumentenkonvertierung verwendet werden?

IronPDF ermöglicht es C#-Entwicklern, HTML in PDF zu konvertieren, PDF-Inhalte zu manipulieren und PDF-Dateien programmgesteuert zu generieren, wodurch die Dokumentenverwaltung in Anwendungen verbessert wird.

Welche Vorteile bietet die Iron Suite für C#-Entwickler?

Die Iron Suite bietet Werkzeuge wie IronPDF, IronXL, IronOCR und IronBarcode, die es Entwicklern ermöglichen, Datenkonvertierungen und -manipulationen über verschiedene Formate hinweg effizient zu handhaben.

Wie können Sie mit C# spezifische Typen aus einer Sammlung filtern?

Sie können den 'as'-Operator in Verbindung mit LINQ-Abfragen verwenden, um spezifische Typen aus einer Sammlung zu filtern und sicherzustellen, dass nur der gewünschte Typ aus gemischten Objektlisten ausgewählt wird.

Was ist ein häufiger Anwendungsfall für die Kombination der 'is'- und 'as'-Operatoren in C#?

Die Kombination der 'is'- und 'as'-Operatoren ermöglicht es Ihnen, zuerst den Typ eines Objekts mit 'is' zu überprüfen, bevor es sicher mit 'as' konvertiert wird, um Typensicherheit zu gewährleisten und Ausnahmen zu vermeiden.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO ...

Weiterlesen

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me