System.Convert-Klasse
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Die statische Convert Klasse enthält Methoden, die in erster Linie zur Unterstützung der Konvertierung in und aus den Basisdatentypen in .NET verwendet werden. Die unterstützten Basistypen sind Boolean, , SByteByteInt32CharInt16, , Int64, UInt16, UInt32UInt64, , , DoubleSingle, , , und .StringDateTime Decimal Darüber hinaus enthält die Convert Klasse Methoden zur Unterstützung anderer Arten von Konvertierungen.
Konvertierungen in und von Basistypen
Eine Konvertierungsmethode ist vorhanden, um jeden Basistyp in jeden anderen Basistyp zu konvertieren. Der tatsächliche Aufruf einer bestimmten Konvertierungsmethode kann jedoch je nach Wert des Basistyps zur Laufzeit und dem Zielbasistyp zu einem von fünf Ergebnissen führen. Diese fünf Ergebnisse sind:
Keine Konvertierung. Dies tritt auf, wenn versucht wird, von einem Typ in sich zu konvertieren (z. B. durch Aufrufen Convert.ToInt32(Int32) mit einem Argument vom Typ Int32). In diesem Fall gibt die Methode einfach eine Instanz des ursprünglichen Typs zurück.
Ein InvalidCastException-Element. Dies tritt auf, wenn eine bestimmte Konvertierung nicht unterstützt wird. Für die folgenden Konvertierungen wird ein InvalidCastException Fehler ausgelöst:
- Konvertierungen von Char in Boolean, Single, , Double, , Decimaloder DateTime.
- Konvertierungen von Boolean, Single, Double, , Decimaloder DateTime in Char.
- Konvertierungen von einem anderen Typ mit Ausnahme Stringvon DateTime .
- Konvertierungen von einem beliebigen anderen Typ, mit Ausnahme Stringvon , in DateTime.
einen FormatException Dies tritt auf, wenn der Versuch, einen Zeichenfolgenwert in einen anderen Basistyp zu konvertieren, fehlschlägt, da die Zeichenfolge nicht das richtige Format aufweist. Die Ausnahme wird für die folgenden Konvertierungen ausgelöst:
- Eine Zeichenfolge, die in einen Boolean Wert konvertiert werden soll, ist nicht gleich Boolean.TrueString oder Boolean.FalseString.
- Eine Zeichenfolge, die in einen Char Wert konvertiert werden soll, besteht aus mehreren Zeichen.
- Eine Zeichenfolge, die in einen beliebigen numerischen Typ konvertiert werden soll, wird nicht als gültige Zahl erkannt.
- Eine zu konvertierende DateTime Zeichenfolge wird nicht als gültiger Datums- und Uhrzeitwert erkannt.
Eine erfolgreiche Konvertierung. Bei Konvertierungen zwischen zwei verschiedenen Basistypen, die nicht in den vorherigen Ergebnissen aufgeführt sind, geben alle Verbreiterungskonvertierungen sowie alle Schmalungskonvertierungen, die nicht zu einem Datenverlust führen, erfolgreich aus, und die Methode gibt einen Wert des zielbezogenen Basistyps zurück.
Ein OverflowException-Element. Dies geschieht, wenn eine schmale Konvertierung zu einem Datenverlust führt. Beispielsweise wird beim Versuch, eine Int32 Instanz zu konvertieren, deren Wert 10000 ist, in einen Byte Typ ausgelöst, da 10000 außerhalb des Bereichs des Byte Datentyps OverflowException liegt.
Eine Ausnahme wird nicht ausgelöst, wenn die Konvertierung eines numerischen Typs zu einem Genauigkeitsverlust führt (d. a. der Verlust einiger am wenigsten signifikanter Ziffern). Eine Ausnahme wird jedoch ausgelöst, wenn das Ergebnis größer ist als durch den Rückgabewerttyp der jeweiligen Konvertierungsmethode dargestellt werden kann.
Wenn beispielsweise ein Double Wert in einen Singlekonvertiert wird, kann ein Genauigkeitsverlust auftreten, aber es wird keine Ausnahme ausgelöst. Wenn die Größe des Werts Double jedoch zu groß ist, um durch eine SingleDarstellung dargestellt zu werden, wird eine Überlaufausnahme ausgelöst.
Nicht dezimale Zahlen
Die Convert Klasse enthält statische Methoden, die Sie aufrufen können, um integrale Werte in nicht dezimale Zeichenfolgendarstellungen zu konvertieren und Zeichenfolgen zu konvertieren, die nicht dezimale Zahlen in integrale Werte darstellen. Jede dieser Konvertierungsmethoden enthält ein base
Argument, mit dem Sie das Zahlensystem angeben können; binär (Basis 2), Oktal (Basis 8) und Hexadezimalzahl (Basis 16) sowie Dezimalzeichen (Basis 10). Es gibt eine Reihe von Methoden, um jeden der CLS-kompatiblen Grundtyp-Integraltypen in eine Zeichenfolge zu konvertieren, und eine, um eine Zeichenfolge in jeden der primitiven integralen Typen zu konvertieren:
ToString(Byte, Int32) und ToByte(String, Int32), um einen Bytewert in eine und aus einer Zeichenfolge in einer angegebenen Basis zu konvertieren.
ToString(Int16, Int32) und ToInt16(String, Int32), um eine 16-Bit-ganzzahlige Vorzeichen in und aus einer Zeichenfolge in einer angegebenen Basis zu konvertieren.
ToString(Int32, Int32) und ToInt32(String, Int32), um eine 32-Bit-Ganzzahl in und aus einer Zeichenfolge in einer angegebenen Basis zu konvertieren.
ToString(Int64, Int32) und ToInt64(String, Int32), um eine 64-Bit-ganzzahlige Zeichenfolge in und aus einer Zeichenfolge in einer angegebenen Basis zu konvertieren.
ToSByte(String, Int32), um die Zeichenfolgendarstellung eines Bytewerts in einem angegebenen Format in ein signiertes Byte zu konvertieren.
ToUInt16(String, Int32), um die Zeichenfolgendarstellung einer ganzen Zahl in einem angegebenen Format in eine nicht signierte 16-Bit-Ganzzahl zu konvertieren.
ToUInt32(String, Int32), um die Zeichenfolgendarstellung einer ganzen Zahl in einem angegebenen Format in eine nicht signierte 32-Bit-Ganzzahl zu konvertieren.
ToUInt64(String, Int32), um die Zeichenfolgendarstellung einer ganzen Zahl in einem angegebenen Format in eine nicht signierte 64-Bit-Ganzzahl zu konvertieren.
Im folgenden Beispiel wird der Wert einer Int16.MaxValue Zeichenfolge in alle unterstützten numerischen Formate konvertiert. Anschließend wird der Zeichenfolgenwert wieder in einen Int16 Wert konvertiert.
using System;
public class Example
{
public static void Main()
{
int[] baseValues = { 2, 8, 10, 16 };
short value = Int16.MaxValue;
foreach (var baseValue in baseValues) {
String s = Convert.ToString(value, baseValue);
short value2 = Convert.ToInt16(s, baseValue);
Console.WriteLine("{0} --> {1} (base {2}) --> {3}",
value, s, baseValue, value2);
}
}
}
// The example displays the following output:
// 32767 --> 111111111111111 (base 2) --> 32767
// 32767 --> 77777 (base 8) --> 32767
// 32767 --> 32767 (base 10) --> 32767
// 32767 --> 7fff (base 16) --> 32767
open System
let baseValues = [ 2; 8; 10; 16 ]
let value = Int16.MaxValue
for baseValue in baseValues do
let s = Convert.ToString(value, baseValue)
let value2 = Convert.ToInt16(s, baseValue)
printfn $"{value} --> {s} (base {baseValue}) --> {value2}"
// The example displays the following output:
// 32767 --> 111111111111111 (base 2) --> 32767
// 32767 --> 77777 (base 8) --> 32767
// 32767 --> 32767 (base 10) --> 32767
// 32767 --> 7fff (base 16) --> 32767
Module Example2
Public Sub Main()
Dim baseValues() As Integer = {2, 8, 10, 16}
Dim value As Short = Int16.MaxValue
For Each baseValue In baseValues
Dim s As String = Convert.ToString(value, baseValue)
Dim value2 As Short = Convert.ToInt16(s, baseValue)
Console.WriteLine("{0} --> {1} (base {2}) --> {3}",
value, s, baseValue, value2)
Next
End Sub
End Module
' The example displays the following output:
' 32767 --> 111111111111111 (base 2) --> 32767
' 32767 --> 77777 (base 8) --> 32767
' 32767 --> 32767 (base 10) --> 32767
' 32767 --> 7fff (base 16) --> 32767
Konvertierungen von benutzerdefinierten Objekten in Basistypen
Zusätzlich zur Unterstützung von Konvertierungen zwischen den Basistypen unterstützt die Methode die Convert Konvertierung eines beliebigen benutzerdefinierten Typs in einen beliebigen Basistyp. Dazu muss der benutzerdefinierte Typ die IConvertible Schnittstelle implementieren, die Methoden zum Konvertieren des Implementierungstyps in jeden der Basistypen definiert. Konvertierungen, die von einem bestimmten Typ nicht unterstützt werden, sollten einen Auslösen eines InvalidCastException.
Wenn die ChangeType Methode einen benutzerdefinierten Typ als ersten Parameter übergeben wird oder wenn dieConvert.To
Type-Methode (z Convert.ToInt32(Object) Convert.ToDouble(Object, IFormatProvider). B. oder wird eine Instanz eines benutzerdefinierten Typs als erster Parameter aufgerufen und übergeben), ruft die Convert Methode wiederum die Implementierung des benutzerdefinierten Typs IConvertible auf, um die Konvertierung auszuführen. Weitere Informationen finden Sie unter Typkonvertierung in .NET.
Kulturspezifische Formatierungsinformationen
Alle Basistypkonvertierungsmethoden und die Methode enthalten Überladungen, die ChangeType einen Parameter vom Typ IFormatProvideraufweisen. Die Methode verfügt beispielsweise Convert.ToBoolean über die folgenden beiden Überladungen:
Der IFormatProvider Parameter kann kulturspezifische Formatierungsinformationen bereitstellen, um den Konvertierungsprozess zu unterstützen. Es wird jedoch von den meisten Basistypkonvertierungsmethoden ignoriert. Sie wird nur von den folgenden Basistypkonvertierungsmethoden verwendet. Wenn ein null
IFormatProvider Argument an diese Methoden übergeben wird, wird das CultureInfo Objekt verwendet, das die aktuelle Kultur darstellt.
Durch Methoden, die einen Wert in einen numerischen Typ konvertieren. Der IFormatProvider Parameter wird von der Überladung verwendet, die Parameter vom Typ String und IFormatProvider. Es wird auch von der Überladung verwendet, die Parameter vom Typ Object hat und IFormatProvider wenn der Laufzeittyp des Objekts ein Stringist.
Durch Methoden, die einen Wert in ein Datum und eine Uhrzeit konvertieren. Der IFormatProvider Parameter wird von der Überladung verwendet, die Parameter vom Typ String und IFormatProvider. Es wird auch von der Überladung verwendet, die Parameter vom Typ Object hat und IFormatProvider wenn der Laufzeittyp des Objekts ein Stringist.
Durch die Überladungen, die Convert.ToString einen IFormatProvider Parameter enthalten und entweder einen numerischen Wert in eine Zeichenfolge oder einen DateTime Wert in eine Zeichenfolge konvertieren.
Jeder benutzerdefinierte Typ, der implementiert IConvertible wird, kann jedoch den IFormatProvider Parameter verwenden.
Base64-Codierung
Die Base64-Codierung konvertiert Binärdaten in eine Zeichenfolge. Daten, die als Basis-64-Ziffern ausgedrückt werden, können einfach über Datenkanäle übertragen werden, die nur 7-Bit-Zeichen übertragen können. Die Convert Klasse enthält die folgenden Methoden zur Unterstützung der Base64-Codierung: Eine Reihe von Methoden unterstützen das Konvertieren eines Arrays von Bytes in ein oder aus einem String Array von Unicode-Zeichen, die aus Base64-Ziffern bestehen.
- ToBase64String, das ein Bytearray in eine base64-codierte Zeichenfolge konvertiert.
- ToBase64CharArray, das ein Bytearray in ein base64-codiertes Zeichenarray konvertiert.
- FromBase64String, die eine base64-codierte Zeichenfolge in ein Bytearray konvertiert.
- FromBase64CharArray, das ein base64-codiertes Zeichenarray in ein Bytearray konvertiert.
Andere gängige Konvertierungen
Sie können andere .NET-Klassen verwenden, um einige Konvertierungen auszuführen, die von den statischen Methoden der Convert Klasse nicht unterstützt werden. Dazu gehören:
Konvertierung in Bytearrays
Die BitConverter Klasse stellt Methoden bereit, mit denen die numerischen Grundtypen (einschließlich Boolean) in Bytearrays und von Bytearrays zurück in primitive Datentypen konvertiert werden.
Zeichencodierung und Decodierung
Die Encoding Klasse und die abgeleiteten Klassen (z UnicodeEncoding . B. und UTF8Encoding) stellen Methoden zum Codieren eines Zeichenarrays oder einer Zeichenfolge bereit (d. a. zum Konvertieren in ein Bytearray in einer bestimmten Codierung) und zum Decodieren eines codierten Bytearrays (d. a. konvertieren Sie ein Bytearray zurück in UTF16-codierte Unicode-Zeichen). Weitere Informationen finden Sie unter Zeichencodierung in .NET.
Beispiele
Das folgende Beispiel veranschaulicht einige der Konvertierungsmethoden in der Convert Klasse, einschließlich ToInt32, ToBooleanund ToString.
double dNumber = 23.15;
try {
// Returns 23
int iNumber = System.Convert.ToInt32(dNumber);
}
catch (System.OverflowException) {
System.Console.WriteLine(
"Overflow in double to int conversion.");
}
// Returns True
bool bNumber = System.Convert.ToBoolean(dNumber);
// Returns "23.15"
string strNumber = System.Convert.ToString(dNumber);
try {
// Returns '2'
char chrNumber = System.Convert.ToChar(strNumber[0]);
}
catch (System.ArgumentNullException) {
System.Console.WriteLine("String is null");
}
catch (System.FormatException) {
System.Console.WriteLine("String length is greater than 1.");
}
// System.Console.ReadLine() returns a string and it
// must be converted.
int newInteger = 0;
try {
System.Console.WriteLine("Enter an integer:");
newInteger = System.Convert.ToInt32(
System.Console.ReadLine());
}
catch (System.ArgumentNullException) {
System.Console.WriteLine("String is null.");
}
catch (System.FormatException) {
System.Console.WriteLine("String does not consist of an " +
"optional sign followed by a series of digits.");
}
catch (System.OverflowException) {
System.Console.WriteLine(
"Overflow in string to int conversion.");
}
System.Console.WriteLine("Your integer as a double is {0}",
System.Convert.ToDouble(newInteger));
let dNumber = 23.15
try
// Returns 23
Convert.ToInt32 dNumber
|> ignore
with :? OverflowException ->
printfn "Overflow in double to int conversion."
// Returns True
let bNumber = System.Convert.ToBoolean dNumber
// Returns "23.15"
let strNumber = System.Convert.ToString dNumber
try
// Returns '2'
System.Convert.ToChar strNumber[0]
|> ignore
with
| :? ArgumentNullException ->
printfn "String is null"
| :? FormatException ->
printfn "String length is greater than 1."
// System.Console.ReadLine() returns a string and it
// must be converted.
let newInteger =
try
printfn "Enter an integer:"
System.Convert.ToInt32(Console.ReadLine())
with
| :? ArgumentNullException ->
printfn "String is null."
0
| :? FormatException ->
printfn "String does not consist of an optional sign followed by a series of digits."
0
| :? OverflowException ->
printfn "Overflow in string to int conversion."
0
printfn $"Your integer as a double is {System.Convert.ToDouble newInteger}"
Dim dNumber As Double
dNumber = 23.15
Try
' Returns 23
Dim iNumber As Integer
iNumber = System.Convert.ToInt32(dNumber)
Catch exp As System.OverflowException
System.Console.WriteLine("Overflow in double to int conversion.")
End Try
' Returns True
Dim bNumber As Boolean
bNumber = System.Convert.ToBoolean(dNumber)
' Returns "23.15"
Dim strNumber As String
strNumber = System.Convert.ToString(dNumber)
Try
' Returns '2'
Dim chrNumber As Char
chrNumber = System.Convert.ToChar(strNumber.Chars(1))
Catch exp As System.ArgumentNullException
System.Console.WriteLine("String is null.")
Catch exp As System.FormatException
System.Console.WriteLine("String length is greater than 1.")
End Try
' System.Console.ReadLine() returns a string and it
' must be converted.
Dim newInteger As Integer
newInteger = 0
Try
System.Console.WriteLine("Enter an integer:")
newInteger = System.Convert.ToInt32(System.Console.ReadLine())
Catch exp As System.ArgumentNullException
System.Console.WriteLine("String is null.")
Catch exp As System.FormatException
System.Console.WriteLine("String does not consist of an " + _
"optional sign followed by a series of digits.")
Catch exp As System.OverflowException
System.Console.WriteLine("Overflow in string to int conversion.")
End Try
System.Console.WriteLine("Your integer as a double is {0}", _
System.Convert.ToDouble(newInteger))