Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.
De statische Convert klasse bevat methoden die voornamelijk worden gebruikt om conversie naar en van de basisgegevenstypen in .NET te ondersteunen. De ondersteunde basistypen zijn Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime en String. Daarnaast bevat de Convert klasse methoden om andere soorten conversies te ondersteunen.
Conversies van en naar basistypen
Er bestaat een conversiemethode om elk basistype te converteren naar elk ander basistype. De werkelijke aanroep van een bepaalde conversiemethode kan echter een van de vijf resultaten opleveren, afhankelijk van de waarde van het basistype tijdens runtime en het doelbasistype. Deze vijf resultaten zijn:
Geen conversie. Dit gebeurt wanneer een poging wordt gedaan om te converteren van een type naar zichzelf (bijvoorbeeld door aan te roepen Convert.ToInt32(Int32) met een argument van het type Int32). In dit geval retourneert de methode gewoon een exemplaar van het oorspronkelijke type.
Een InvalidCastException. Dit gebeurt wanneer een bepaalde conversie niet wordt ondersteund. Een InvalidCastException wordt gegenereerd voor de volgende conversies:
A FormatException. Dit gebeurt wanneer de poging om een tekenreekswaarde te converteren naar een ander basistype mislukt omdat de tekenreeks niet de juiste indeling heeft. De uitzondering wordt gegenereerd voor de volgende conversies:
- Een tekenreeks die moet worden geconverteerd naar een Boolean waarde, is niet gelijk aan Boolean.TrueString of Boolean.FalseString.
- Een tekenreeks die moet worden geconverteerd naar een Char waarde bestaat uit meerdere tekens.
- Een tekenreeks die moet worden geconverteerd naar een numeriek type, wordt niet herkend als een geldig getal.
- Een tekenreeks die moet worden geconverteerd naar een DateTime tekenreeks wordt niet herkend als een geldige datum- en tijdwaarde.
Een geslaagde conversie. Voor conversies tussen twee verschillende basistypen die niet worden vermeld in de vorige resultaten, zullen alle uitbreidingsconversies en alle vernauwingsconversies die niet resulteren in verlies van gegevens slagen, en zal de methode een waarde van het doelbasistype retourneren.
Een OverflowException. Dit gebeurt wanneer een verkleinende conversie leidt tot verlies van gegevens. Als u bijvoorbeeld probeert een Int32 exemplaar met de waarde 10000 naar een Byte type te converteren, wordt er een OverflowException gegenereerd omdat 10000 buiten het bereik van het Byte gegevenstype valt.
Er wordt geen uitzondering gegenereerd als de conversie van een numeriek type resulteert in een verlies van precisie (dat wil gezegd het verlies van enkele minst significante cijfers). Er wordt echter een uitzondering gegenereerd als het resultaat groter is dan kan worden vertegenwoordigd door het retourwaardetype van de specifieke conversiemethode.
Wanneer een Double wordt geconverteerd naar een Single, kan er bijvoorbeeld sprake zijn van een verlies van precisie, maar er wordt geen uitzondering gegenereerd. Als de grootte van de Double waarde echter te groot is om te worden weergegeven door een Single, wordt er een overloopuitzondering gegenereerd.
Niet-decimale getallen
De Convert klasse bevat statische methoden die u kunt aanroepen om integrale waarden te converteren naar niet-decimale tekenreeksweergaven en om tekenreeksen te converteren die niet-decimale getallen vertegenwoordigen naar integrale waarden. Elk van deze conversiemethoden bevat een base argument waarmee u het getalsysteem kunt opgeven; binair (grondtal 2), octaal (grondtal 8) en hexadecimaal (grondtal 16), evenals decimaal (grondtal 10). Er is een set methoden voor het converteren van elk van de conforme primitieve integrale typen cls naar een tekenreeks en een om een tekenreeks te converteren naar elk van de primitieve integrale typen:
ToString(Byte, Int32) en ToByte(String, Int32)als u een bytewaarde wilt converteren naar en van een tekenreeks in een opgegeven basis.
ToString(Int16, Int32) en ToInt16(String, Int32)om een 16-bits geheel getal te converteren naar en van een tekenreeks in een opgegeven basis.
ToString(Int32, Int32) en ToInt32(String, Int32)om een 32-bits geheel getal te converteren naar en van een tekenreeks in een opgegeven basis.
ToString(Int64, Int32) en ToInt64(String, Int32)om een 64-bits geheel getal te converteren naar en van een tekenreeks in een opgegeven basis.
ToSByte(String, Int32)om de tekenreeksweergave van een bytewaarde in een opgegeven indeling te converteren naar een ondertekende byte.
ToUInt16(String, Int32)om de tekenreeksweergave van een geheel getal in een opgegeven indeling te converteren naar een niet-ondertekend 16-bits geheel getal.
ToUInt32(String, Int32) om de tekenreeksweergave van een geheel getal in een opgegeven indeling te converteren naar een ongetekend 32-bits geheel getal.
ToUInt64(String, Int32)om de tekenreeksrepresentatie van een geheel getal in een gespecificeerd formaat te converteren naar een niet-ondertekend 64-bits geheel getal.
In het volgende voorbeeld wordt de waarde van Int16.MaxValue geconverteerd naar een tekenreeks in alle ondersteunde numerieke formaten. Vervolgens wordt de tekenreekswaarde weer geconverteerd naar een Int16 waarde.
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($"{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
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
Conversies van aangepaste objecten naar basistypen
Naast ondersteunende conversies tussen de basistypen ondersteunt de methode de Convert conversie van elk aangepast type naar elk basistype. Hiervoor moet het aangepaste type de IConvertible interface implementeren, waarmee methoden worden gedefinieerd voor het converteren van het implementatietype naar elk van de basistypen. Conversies die niet door een bepaald type worden ondersteund, moeten een InvalidCastException gooien.
Wanneer de ChangeType-methode een aangepast type als zijn eerste parameter krijgt, of wanneer de Convert.ToType-methode (zoals Convert.ToInt32(Object) of Convert.ToDouble(Object, IFormatProvider)) wordt aangeroepen en deze een exemplaar van een aangepast type als zijn eerste parameter krijgt, roept de Convert-methode op zijn beurt de IConvertible-implementatie van het aangepaste type aan om de conversie uit te voeren. Zie Typeconversie in .NET voor meer informatie.
Cultuurspecifieke opmaakinformatie
Alle basistypeconversiemethoden en de ChangeType methode bevatten overbelastingen met een parameter van het type IFormatProvider. De Convert.ToBoolean methode heeft bijvoorbeeld de volgende twee overbelastingen:
De IFormatProvider parameter kan cultuurspecifieke opmaakinformatie leveren om het conversieproces te ondersteunen. Het wordt echter genegeerd door de meeste conversiemethoden van het basistype. Het wordt alleen gebruikt door de volgende basistype conversiemethoden. Als een nullIFormatProvider argument wordt doorgegeven aan deze methoden, wordt het CultureInfo object dat de huidige cultuur vertegenwoordigt, gebruikt.
Op basis van methoden waarmee een waarde wordt geconverteerd naar een numeriek type. De IFormatProvider parameter wordt gebruikt door de overbelasting met parameters van het type String en IFormatProvider. Het wordt ook gebruikt door de overloadfunctie met parameters van de types Object en IFormatProvider als het runtimetype van het object een String is.
Op basis van methoden waarmee een waarde wordt geconverteerd naar een datum en tijd. De IFormatProvider parameter wordt gebruikt door de overbelasting met parameters van het type String en IFormatProvider. Het wordt ook gebruikt door de overloadfunctie met parameters van de types Object en IFormatProvider als het runtimetype van het object een String is.
Door de Convert.ToString overloads die een IFormatProvider parameter bevatten en een numerieke waarde naar een tekenreeks of een DateTime waarde naar een tekenreeks converteren.
Echter, elk door de gebruiker gedefinieerd type dat IConvertible implementeert, kan gebruikmaken van de IFormatProvider parameter.
Base64-codering
Met Base64-codering worden binaire gegevens geconverteerd naar een tekenreeks. Gegevens die worden uitgedrukt als basis-64 cijfers, kunnen eenvoudig worden overgebracht via gegevenskanalen die slechts 7-bits tekens kunnen verzenden. De Convert-klasse bevat de volgende methoden ter ondersteuning van base64-codering: Een reeks methoden biedt ondersteuning voor het converteren van een matrix van bytes naar en van een String of naar en van een matrix van Unicode-tekens die bestaan uit base-64-cijfertekens.
- ToBase64String, waarmee een bytematrix wordt geconverteerd naar een met base64 gecodeerde tekenreeks.
- ToBase64CharArray, waarmee een bytematrix wordt geconverteerd naar een met base64 gecodeerde tekenmatrix.
- FromBase64String, waarmee een base64-gecodeerde tekenreeks wordt geconverteerd naar een bytematrix.
- FromBase64CharArray, waarmee een base64-gecodeerde tekenmatrix wordt geconverteerd naar een bytematrix.
Andere veelgebruikte conversies
U kunt andere .NET-klassen gebruiken om enkele conversies uit te voeren die niet worden ondersteund door de statische methoden van de Convert klasse. Deze omvatten:
Conversie naar bytematrices
De BitConverter klasse biedt methoden waarmee de primitieve numerieke typen (inclusief Boolean) worden geconverteerd naar bytematrices en van bytematrices terug naar primitieve gegevenstypen.
Tekencodering en -decodering
De Encoding klasse en de afgeleide klassen (zoals UnicodeEncoding en UTF8Encoding) bieden methoden voor het coderen van een tekenmatrix of een tekenreeks (dat wil gezegd, om deze te converteren naar een bytematrix in een bepaalde codering) en om een gecodeerde bytematrix te decoderen (dat wil gezegd een bytematrix weer converteren naar UTF16-gecodeerde Unicode-tekens). Zie Character Encoding in .NET voor meer informatie.
Voorbeelden
In het volgende voorbeeld ziet u enkele conversiemethoden in de Convert klasse, waaronder ToInt32, ToBooleanen 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 {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))