Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
A statikus Convert osztály olyan metódusokat tartalmaz, amelyek elsősorban a .NET-ben lévő alapadattípusokra való konvertálás támogatására szolgálnak. A támogatott alaptípusok a következőkBoolean: , Char, SByte, Byte, Int16, Int32Int64UInt16UInt32, UInt64, , Single, , DoubleDecimalDateTime , és .String Az osztály emellett Convert más típusú átalakítások támogatására is használható módszereket tartalmaz.
Átalakítás alaptípusokra és alaptípusokból
Létezik konverziós módszer, amely minden alaptípust minden más alaptípusra konvertál. Egy adott konverziós módszer tényleges hívása azonban az öt eredmény egyikét eredményezheti a futásidőben az alaptípus és a cél alaptípus értékétől függően. Ez az öt eredmény a következő:
Nincs átalakítás. Ez akkor fordul elő, ha egy típust próbálnak önmagába konvertálni (például a Convert.ToInt32(Int32) hívása során egy Int32 típusú argumentummal). Ebben az esetben a metódus egyszerűen az eredeti típus egy példányát adja vissza.
Egy InvalidCastException. Ez akkor fordul elő, ha egy adott átalakítás nem támogatott. A InvalidCastException hibát jelez a következő konverziók esetén:
Egy FormatException. Ez akkor fordul elő, ha a sztringérték más alaptípusra való konvertálásának kísérlete meghiúsul, mert a sztring nem a megfelelő formátumban van. A rendszer kivételt ad ki a következő konverziók esetében:
- A sztring, amelyet értékké kell konvertálni, nem egyenlő a Boolean vagy Boolean.TrueString értékkel.
- A Char értékké konvertálandó sztring több karakterből áll.
- A numerikus típussá konvertálandó sztringek nem ismerhetők fel érvényes számként.
- A konvertálni kívánt sztring DateTime nem ismerhető fel érvényes dátum- és időértékként.
Sikeres átalakítás. Az előző eredményekben nem szereplő két különböző alaptípus közötti konverziók esetén az összes szélesítő konverzió, valamint az összes olyan szűkítő konverzió sikeres lesz, amely nem eredményez adatvesztést, és a metódus a célzott alaptípus értékét adja vissza.
Egy OverflowException. Ez akkor fordul elő, ha a szűkülő átalakítás adatvesztést eredményez. Például, ha megpróbál átalakítani egy Int32 típusú, 10000-es értékű példányt Byte típussá, az OverflowException kivételt dob, mivel a 10000 kívül esik a Byte adattípus tartományán.
A program nem tesz kivételt, ha egy numerikus típus konvertálása pontosságvesztést eredményez (azaz néhány legkevésbé jelentős számjegy elvesztését). Kivételt jelent azonban, ha az eredmény nagyobb, mint amit az adott konverziós módszer visszatérési értéktípusa képvisel.
Ha például egy DoubleSingle-ba alakul, pontosságvesztés fordulhat elő, de nem keletkezik kivétel. Ha azonban a Double nagysága túl nagy ahhoz, hogy egy Single ábrázolja, túlcsordulási kivétel keletkezik.
Nem decimális számok
Az Convert osztály olyan statikus metódusokat tartalmaz, amelyekkel az integrálértékeket nem decimális sztring-ábrázolásokká alakíthatja át, és a nem decimális számokat ábrázoló sztringeket integrálértékekké alakíthatja. Mindegyik átalakítási módszer tartalmaz egy base argumentumot, amely lehetővé teszi a számrendszer megadását; bináris (2. alap), oktális (8. alap) és hexadecimális (16. alap), valamint decimális (10. alap). Van egy olyan módszerkészlet, amely lehetővé teszi a CLS-kompatibilis primitív integráltípusok mindegyikének sztringgé alakítását, valamint egy olyan, amely a sztringeket visszaalakítja az egyes primitív integráltípusokká.
ToString(Byte, Int32) és ToByte(String, Int32), egy bájtérték egy adott alapú karakterlánccá és abból történő konvertálására.
ToString(Int16, Int32) és ToInt16(String, Int32), hogy egy 16 bites előjeles egész számot konvertáljunk egy adott alapú sztringre és sztringből.
ToString(Int32, Int32) és ToInt32(String, Int32) egy 32 bites aláírt egész számnak egy megadott alapú sztringre való konvertálására, illetve sztringből való konvertálására.
ToString(Int64, Int32) és ToInt64(String, Int32)egy 64 bites aláírt egész szám konvertálása egy megadott alapban lévő sztringre és sztringből.
ToSByte(String, Int32) egy bájtérték sztring ábrázolásának konvertálása megadott formátumban aláírt bájttá.
ToUInt16(String, Int32), egy adott formátumban lévő egész szám sztringképének átalakítása nem előjeles 16 bites egész számmá.
ToUInt32(String, Int32), az egész szám sztringreprezentációját egy adott formátumban el nem írt 32 bites egész számmá konvertálja.
ToUInt64(String, Int32)a megadott formátumú egész szám sztring reprezentációját előjelnélküli 64 bites egész számmá alakításához.
Az alábbi példa a Int16.MaxValue értékét sztringgé alakítja minden támogatott számformátum esetében. Ezután a sztring értékét visszaalakítja egy Int16 értékké.
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
Átalakítás egyéni objektumokról alaptípusokra
Az alaptípusok közötti átalakítás támogatása mellett a Convert módszer támogatja az egyéni típusok bármilyen alaptípusra való konvertálását. Ehhez az egyéni típusnak implementálnia kell az IConvertible interfészt, amely metódusokat határoz meg a implementálási típus minden alaptípusra való konvertálásához. Az adott típus által nem támogatott konverzióknak egy InvalidCastException kivételt kell dobniuk.
Ha a ChangeType metódus első paramétereként egy egyéni típust ad át, vagy amikor aConvert.To Típus metódus (például Convert.ToInt32(Object) meghívja vagy Convert.ToDouble(Object, IFormatProvider) átadja az egyéni típus egy példányát első paraméterként), a Convert metódus meghívja az egyéni típus implementációját IConvertible az átalakítás végrehajtásához. További információ: Típuskonvertálás a .NET-ben.
Kultúraspecifikus formázási információk
Az összes alaptípus-konverziós módszer és a ChangeType metódus olyan túlterheléseket tartalmaz, amelyek típusparaméterrel IFormatProviderrendelkeznek. A metódus például Convert.ToBoolean a következő két túlterhelést tartalmazza:
A IFormatProvider paraméter a kultúraspecifikus formázási információkat is megadhatja, hogy segítse a konvertálási folyamatot. Ezt azonban a legtöbb alaptípus-konverziós módszer figyelmen kívül hagyja. Csak a következő alaptípus-átalakítási módszerek használják. Ha argumentumot nullIFormatProvider ad át ezeknek a metódusoknak, a rendszer az CultureInfo aktuális kultúrát képviselő objektumot használja.
Olyan metódusok szerint, amelyek numerikus típussá alakítják az értéket. Az IFormatProvider paramétert az a túlterhelés használja, amelynek paraméterei String és IFormatProvider típusúak. A túlterhelés akkor is használható, ha rendelkezik Object és IFormatProvider típusparaméterekkel, ha az objektum futásidejű típusa String.
Az értékeket dátummá és idővé konvertáló metódusok szerint. Az IFormatProvider paramétert az a túlterhelés használja, amelynek paraméterei String és IFormatProvider típusúak. A túlterhelés akkor is használható, ha rendelkezik Object és IFormatProvider típusparaméterekkel, ha az objektum futásidejű típusa String.
A Convert.ToString paramétert IFormatProvider tartalmazó túlterhelések, amelyek numerikus értéket sztringgé vagy DateTime értékké alakítanak át.
Bármely felhasználó által definiált típus, amely implementálja a IConvertible, használhatja a IFormatProvider paramétert.
Base64-kódolás
A Base64 kódolás a bináris adatokat sztringgé alakítja. Az alap-64 számjegyként kifejezett adatok könnyen továbbíthatók olyan adatcsatornákon keresztül, amelyek csak 7 bites karaktereket képesek továbbítani. Az Convert osztály a következő metódusokat tartalmazza a base64 kódolás támogatásához: A metódusok készlete támogatja a bájtok tömbjének konvertálását egy 64 számjegyből álló Unicode-karakterekből álló tömbbe, illetve azokból String vagy azok közé.
- ToBase64String, amely egy bájttömböt base64 kódolású sztringgé alakít át.
- ToBase64CharArray, amely egy bájttömböt base64 kódolású karaktertömbté alakít át.
- FromBase64String, amely egy base64 kódolású sztringet bájttömbté konvertál.
- FromBase64CharArray, amely egy base64 kódolású karaktertömböt bájttömbté alakít át.
Egyéb gyakori átalakítások
Más .NET-osztályokkal olyan átalakításokat hajthat végre, amelyeket az osztály statikus metódusai nem támogatnak Convert . Ezek közé tartoznak:
Konvertálás bájttömbökké
Az BitConverter osztály olyan metódusokat biztosít, amelyek a primitív numerikus típusokat (beleértve Boolean) bájttömbökké, a bájttömbökből pedig a primitív adattípusokká alakítják át.
Karakterkódolás és dekódolás
Az Encoding osztály és annak származtatott osztályai (például UnicodeEncoding és UTF8Encoding) metódusokat biztosítanak egy karaktertömb vagy egy sztring kódolásához (azaz egy adott kódolásban lévő bájttömbké alakításához), valamint egy kódolt bájttömb dekódolásához (azaz egy bájttömb UTF16 kódolású Unicode-karakterekké alakításához). További információ: Karakterkódolás a .NET-ben.
Példák
Az alábbi példa bemutatja az Convert osztály néhány konverziós módszerét, beleértve a ToInt32, ToBoolean és 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))