Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Statická Convert třída obsahuje metody, které se primárně používají k podpoře převodu do a ze základních datových typů v .NET. Podporované základní typy jsou Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime a String. Kromě toho Convert třída obsahuje metody pro podporu jiných druhů převodů.
Převody na základní typy a ze základních typů
Metoda převodu existuje k převodu každého základního typu na každý druhý základní typ. Skutečné volání konkrétní metody převodu však může vytvořit jeden z pěti možných výsledků v závislosti na hodnotě základního typu během běhu programu a cílového základního typu. Mezi tyto pět výsledků patří:
Bez převodu. K tomu dochází při pokusu o převod z typu na sebe (například voláním Convert.ToInt32(Int32) s argumentem typu Int32). V tomto případě metoda jednoduše vrátí objekt původního typu.
A InvalidCastException. K tomu dochází v případě, že se konkrétní převod nepodporuje. Vyvolá se InvalidCastException pro následující převody:
Úloha FormatException. K tomu dochází, když pokus o převod řetězcové hodnoty na jakýkoli jiný základní typ selže, protože řetězec není ve správném formátu. Výjimka se vyvolá pro následující převody:
- Řetězec, který se má převést na Boolean hodnotu, se nerovná Boolean.TrueString nebo Boolean.FalseString.
- Řetězec, který se má převést na Char hodnotu, se skládá z více znaků.
- Řetězec, který se má převést na jakýkoli číselný typ, není rozpoznán jako platné číslo.
- Řetězec, který se má převést na hodnotu DateTime , není rozpoznán jako platná hodnota data a času.
Úspěšný převod. Pro převody mezi dvěma různými základními typy, které nejsou uvedeny v předchozích výsledcích, všechny rozšiřující převody a všechny zužující převody, které nemají za následek ztrátu dat, budou úspěšné a metoda vrátí hodnotu cílového základního typu.
A OverflowException. K tomu dochází, když zužující převod způsobí ztrátu dat. Například pokus o převod Int32 instance, jejíž hodnota je 1 0000 na Byte typ vyvolá, OverflowException protože 1 0000 je mimo rozsah datového Byte typu.
Pokud převod číselného typu způsobí ztrátu přesnosti (to znamená ztrátu některých nejméně významných číslic), nebude vyvolána výjimka. Pokud je však výsledek větší, než je možné reprezentovat návratovým typem hodnoty konkrétní metody převodu, vyvolá se výjimka.
Například při převodu Double na Single, může dojít ke ztrátě přesnosti, ale není vyvolána žádná výjimka. Pokud je však velikost Double příliš velká na to, aby mohla být reprezentována Single, je vyvolána výjimka přetečení.
Ne desetinná čísla
Convert Třída obsahuje statické metody, které lze volat pro převod celočíselných hodnot na řetězcové reprezentace bez desetinné čárky, a převod řetězců, které představují ne desetinná čísla na celočíselné hodnoty. Každá z těchto metod převodu base
obsahuje argument, který umožňuje zadat číselný systém; binární (základ 2), osmičkové (základ 8) a šestnáctkové (základ 16) a desetinné číslo (základ 10). Existuje sada metod pro převod každého z primitivních celočíselných typů kompatibilních se specifikací CLS na řetězec a jeden pro převod řetězce na každý z primitivních integrálních typů:
ToString(Byte, Int32) a ToByte(String, Int32), k převodu bajtové hodnoty na řetězec a z řetězce ve zadaném základu.
ToString(Int16, Int32) a ToInt16(String, Int32), pro převod 16bitového celého čísla se znaménkem na řetězec a zpět v zadaném základu.
ToString(Int32, Int32) a ToInt32(String, Int32), pro převod 32bitového podepsaného celého čísla na řetězec a z řetězce v zadaném základu.
ToString(Int64, Int32) a ToInt64(String, Int32), pro převod 64bitového celého čísla se znaménkem na řetězec a zpět, v zadaném základu.
ToSByte(String, Int32), chcete-li převést řetězcovou reprezentaci bajtové hodnoty v zadaném formátu na podepsaný bajt.
ToUInt16(String, Int32), pro převod řetězcové reprezentace celého čísla v zadaném formátu na 16bitové celé číslo bez znaménka.
ToUInt32(String, Int32), chcete-li převést řetězcové vyjádření celého čísla ve specifikovaném formátu na 32bitové celé číslo bez znaménka.
ToUInt64(String, Int32), pro převedení řetězcového vyjádření celého čísla v zadaném formátu na neznaménkové 64bitové celé číslo.
Následující příklad převede hodnotu Int16.MaxValue na řetězec ve všech podporovaných číselných formátech. Potom převede řetězcovou hodnotu zpět na Int16 hodnotu.
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
Převody z vlastních objektů na základní typy
Kromě podpory převodů mezi základními typy Convert podporuje metoda převod libovolného vlastního typu na jakýkoli základní typ. K tomu musí vlastní typ implementovat IConvertible rozhraní, které definuje metody pro převod typu implementace na každý ze základních typů. Převody, které nejsou podporovány konkrétním typem, by měly vyvolat InvalidCastException.
Informace o formátování specifické pro kulturu
Všechny metody převodu základního typu a metoda ChangeType zahrnují přetížení, které mají parametr typu IFormatProvider. Například Convert.ToBoolean metoda má následující dvě přetížení:
Parametr IFormatProvider může poskytnout informace o formátování specifické pro jazykovou verzi, které vám pomůžou s procesem převodu. Je však ignorována většinou metod převodu základního typu. Používá se pouze následujícími metodami převodu typu základního. Pokud je null
IFormatProvider argument předán těmto metodám, je použit CultureInfo objekt, který představuje aktuální jazykovou verzi.
Pomocí metod, které převedou hodnotu na číselný typ. Parametr IFormatProvider se používá přetížením, které má parametry typu String a IFormatProvider. Používá se také u přetížení, které má parametry typu Object a IFormatProvider, pokud je typ objektu za běhu String.
Pomocí metod, které převedou hodnotu na datum a čas. Parametr IFormatProvider se používá přetížením, které má parametry typu String a IFormatProvider. Používá se také u přetížení, které má parametry typu Object a IFormatProvider, pokud je typ objektu za běhu String.
Přetíženími Convert.ToString, která obsahují parametr IFormatProvider a která převádějí buď číselnou hodnotu na řetězec, nebo hodnotu DateTime na řetězec.
Jakýkoli uživatelem definovaný typ, který implementuje IConvertible , však může použít IFormatProvider parametr.
Kódování Base64
Kódování Base64 převede binární data na řetězec. Data vyjádřená jako číslice base-64 lze snadno předávat přes datové kanály, které mohou přenášet pouze 7bitové znaky. Třída Convert obsahuje následující metody pro kódování do base64: Soubor metod podporuje převod pole bajtů na a z String nebo na a z pole znaků Unicode, které se skládají ze znaků základního 64místného systému.
- ToBase64String, který převede bajtové pole na řetězec kódovaný v base64.
- ToBase64CharArray, který převede bajtové pole na znakové pole s kódováním base64.
- FromBase64String, který převede řetězec kódování base64 na bajtové pole.
- FromBase64CharArray, který převede pole znaků s kódováním base64 na bajtové pole.
Další běžné převody
Jiné třídy .NET můžete použít k provedení některých převodů, které nejsou podporovány statickými metodami Convert třídy. Tady jsou některé z nich:
Převod na pole bajtů
Třída BitConverter poskytuje metody, které převádějí primitivní číselné typy (včetně Boolean) na bajtová pole a z bajtových polí zpět na primitivní datové typy.
Kódování a dekódování znaků
Třída Encoding a její odvozené třídy (například UnicodeEncoding a UTF8Encoding) poskytují metody pro kódování znakového pole nebo řetězce (to znamená převést je na bajtové pole v určitém kódování) a dekódování zakódovaného bajtového pole (to znamená převést bajtové pole zpět na znaky Unicode kódované v UTF16). Další informace naleznete v tématu Kódování znaků v .NET.
Příklady
Následující příklad demonstruje některé metody převodu ve třídě Convert, včetně ToInt32, ToBoolean a 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))