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. Hier kommt das Operator-Schlüsselwort as ins Spiel. Zusammen mit seinem nahen Verwandten, dem Operator is, unterstützt dieser die Typüberprüfung und Typkonvertierung. In diesem Tutorial werden wir die Feinheiten dieses Operators und seine Anwendungsfälle erkunden.
Verständnis des as-Operators
Grundlagen des as Operators
Der Operator as in C# ist ein binärer Operator, der zur Durchführung bestimmter Konvertierungen zwischen kompatiblen Referenztypen oder Nullable-Typen verwendet wird. Der folgende Code veranschaulicht dies:
// 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.
' Declare an object that holds a string
Dim myObj As Object = "Hello, World!"
' Use the 'as' operator to attempt to convert 'myObj' to a string
Dim myStr As String = TryCast(myObj, String)
' myStr will hold the string value "Hello, World!" if the conversion is successful;
' otherwise, it will be null.
Im obigen Code ist myObj ein Objekt vom Typ object (der Basistyp für alle Typen in C#). Wir sind uns über den zugrundeliegenden Typ zur Kompilierzeit nicht im Klaren. Der Operator as wird verwendet, um zu versuchen, myObj als string zu behandeln. Im Erfolgsfall enthält myStr den Zeichenkettenwert. Andernfalls enthält es den Wert null.
Unterscheidet sich von Explicit Cast?
Obwohl sowohl der Operator as als auch die explizite Typumwandlung ähnliche Zwecke erfüllen, gibt es einen wichtigen Unterschied. Wenn ein expliziter Cast fehlschlägt, wird eine Ausnahme ausgelöst. Wenn der Versuch des Operators as, von einem Typ in einen anderen zu konvertieren, fehlschlägt, gibt der Operator einen Wert vom Typ null 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.
Dim someValue As Object = 12345
Dim castResult As String
' Using explicit cast
Try
castResult = DirectCast(someValue, String) ' This will throw an exception since the cast fails.
Catch ex As Exception
castResult = Nothing ' The result is set to null if an exception is caught.
End Try
' Using the 'as' operator
Dim asResult As String = TryCast(someValue, String) ' No exception, but 'asResult' will be null since the cast fails.
Wie ersichtlich, ist die Verwendung des Operators as oft sicherer, da man so potenzielle Laufzeitfehler vermeidet.
Die Verbindung mit dem is-Operator
Häufig wird der Operator as zusammen mit dem Operator is für Typüberprüfungen verwendet, bevor eine Konvertierung versucht wird. Der Operator is prüft, ob das bereitgestellte Objekt vom angegebenen Typ ist, und gibt in diesem Fall true zurück, andernfalls false.
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");
}
Dim testObject As Object = "This is a string"
' Check if testObject is of type string
If TypeOf testObject Is String Then
' If true, convert testObject to string using 'as'
Dim result As String = TryCast(testObject, String)
Console.WriteLine(result) ' Outputs: This is a string
Else
Console.WriteLine("Not a string")
End If
Mit der Einführung des Pattern Matching in späteren Versionen von C# kann der Operator is auch bestimmte Aktionen ausführen, wenn der Typtest erfolgreich ist. Dadurch verringert sich oft die Notwendigkeit, den Operator as zu verwenden.
Tiefer eintauchen: Sonderfälle und Überlegungen
Nullbare Werttyp-Konvertierungen
Einer der Sonderfälle, in denen der Operator as von unschätzbarem Wert ist, betrifft Werttypen, die Nullwerte zulassen. Werttypen (wie int, double usw.) können keinen Wert vom Typ null zugewiesen bekommen. Indem Sie sie jedoch nullable machen, können Sie ihnen null zuweisen. Der Operator as kann verwendet werden, um zu versuchen, in einen Nullable-Werttyp zu konvertieren:
// 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?;
' Declare a nullable integer
Dim nullableInt? As Integer = 10
' Box the nullable int
Dim objInt As Object = nullableInt
' Attempt to unbox using 'as' to a nullable int type
Dim resultInt? As Integer = CType(objInt, Integer?)
Referenzkonversionen und benutzerdefinierte Konversionen
Der Operator as 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"
Friend Class Sample
' Define an implicit conversion from Sample to string
Public Shared Widening Operator CType(ByVal s As Sample) As String
Return "Converted to String"
End Operator
End Class
Private sampleObject As New Sample()
' Use 'as' to convert 'sampleObject' to string
Private conversionResult As String = TryCast(sampleObject, String)
' conversionResult will hold "Converted to String"
Hier ermöglicht die benutzerdefinierte Konvertierungsmethode, dass ein Objekt vom Typ Sample als string behandelt wird.
Wenn as nicht zutrifft
Beachten Sie, dass der Operator as nicht mit Werttypen (außer bei Nullable-Werttypen) oder mit benutzerdefinierten Konvertierungen, die eine explizite Methode beinhalten, verwendet werden kann.
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 Werttyp implizit von einem object erbt. Wenn Sie einen Werttyp in eine Box einbetten, umschließen Sie ihn mit 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;
Dim intValue As Integer = 42
' Box the value type to an object
Dim boxedValue As Object = intValue
Hier wird der intValue in einen object eingeschlossen.
Unboxing ist der umgekehrte Prozess des Boxings, d. h. das Extrahieren des Werttyps aus dem object. Der Operator as kann verwendet werden, um Werte sicher zu entpacken, insbesondere wenn Sie sich nicht sicher sind, ob der Wert object den erwarteten Werttyp enthält. 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?;
Dim obj As Object = 42
' Attempt to unbox using 'as' to a nullable int type
Dim result? As Integer = CType(obj, Integer?)
Arbeiten mit Arrays
Arrays sind Referenztypen in C#. Manchmal müssen Sie möglicherweise feststellen, ob es sich bei einem object um einen bestimmten Array-Typ handelt und dann damit arbeiten. Der Operator as kann hier ebenfalls 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
Dim arrayObject() As Object = New String() { "one", "two", "three" }
' Attempt to cast to a string array using 'as'
Dim stringArray() As String = TryCast(arrayObject, String())
' stringArray will hold the array of strings if successful
Im obigen Code ist arrayObject ein Array von Objekten, enthält aber tatsächlich Zeichenketten. Mit dem Operator as können Sie versuchen, es gefahrlos als ein Array von Zeichenketten zu behandeln.
Kombination von as mit LINQ
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 ruft man Objekte unterschiedlicher Typen in einer Sammlung ab und möchte bestimmte Typen herausfiltern. Hier kann der Operator as sehr hilfreich sein.
Zum Beispiel, betrachten Sie eine Liste von Objekten, die sowohl Strings als auch Ganzzahlen enthält. Wenn Sie nur die Zeichenketten abrufen möchten, können Sie den Operator as in Verbindung 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"
Dim mixedList = New List(Of Object) From {"Hello", 42, "World", 100}
' Use LINQ to select only strings from mixedList
Dim stringValues = mixedList.Select(Function(item) TryCast(item, String)).Where(Function(item) item IsNot Nothing).ToList()
' stringValues will contain "Hello" and "World"
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, optische Zeichenerkennung (OCR) und Barcode-Erzeugung und -Lesen nahtlos zu integrieren. Diese Werkzeuge sind, wie bereits in unserer vorherigen Diskussion über die Operatoren as und is erläutert, von entscheidender Bedeutung für die Steigerung der Effizienz eines Entwicklers beim Erstellen robuster Anwendungen.
IronPDF

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 entgegennehmen und sie, ähnlich einer Typkonvertierung, in ein gut formatiertes PDF-Dokument umwandeln.
IronXL

Der Umgang mit Excel-Dateien ist in vielen Softwareanwendungen eine häufige Anforderung. IronXL for Excel Operations ermöglicht Entwicklern das Lesen, Bearbeiten und Erstellen von Excel-Tabellen, ohne auf Office Interop angewiesen zu sein. Im Kontext unserer Diskussion über Typkonvertierungen können Sie sich IronXL als ein Werkzeug vorstellen, mit dem Sie Datenstrukturen oder Datenbankeinträge in C# nahtlos in Excel-Formate konvertieren können.
IronOCR

Optical Character Recognition with IronOCR ist ein optisches Zeichenerkennungstool, das es Entwicklern ermöglicht, Text aus Bildern zu lesen und zu interpretieren. Um die Verbindung zu unserem Tutorial herzustellen: Es ist ähnlich wie die Umwandlung eines object (in diesem Fall ein Bild) in einen spezifischeren Typ (string oder Textdaten) mithilfe erweiterter Erkennungsfunktionen.
IronBarcode

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

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 Operatoren as und is, 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 zu beachten, dass jede Produktlizenz bei $999 beginnt und jedes Produkt eine kostenlose Testversion von Iron Suite Tools bietet. Für alle, die eine Komplettlö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.




