Kelas System.Convert
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Kelas statis Convert berisi metode yang terutama digunakan untuk mendukung konversi ke dan dari jenis data dasar di .NET. Jenis dasar yang didukung adalah Boolean, , Char, ByteSByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, , DateTime dan String. Selain itu, Convert kelas ini mencakup metode untuk mendukung jenis konversi lainnya.
Konversi ke dan dari jenis dasar
Metode konversi ada untuk mengonversi setiap jenis dasar ke setiap jenis dasar lainnya. Namun, panggilan aktual ke metode konversi tertentu dapat menghasilkan salah satu dari lima hasil, tergantung pada nilai jenis dasar pada waktu proses dan jenis dasar target. Kelima hasil ini adalah:
Tidak ada konversi. Ini terjadi ketika upaya dilakukan untuk mengonversi dari jenis ke dirinya sendiri (misalnya, dengan memanggil Convert.ToInt32(Int32) dengan argumen jenis Int32). Dalam hal ini, metode ini hanya mengembalikan instans dari jenis aslinya.
Sebuah InvalidCastException. Ini terjadi ketika konversi tertentu tidak didukung. Dilemparkan InvalidCastException untuk konversi berikut:
FormatException. Ini terjadi ketika upaya untuk mengonversi nilai string ke jenis dasar lainnya gagal karena string tidak dalam format yang tepat. Pengecualian dilemparkan untuk konversi berikut:
- String yang akan dikonversi ke Boolean nilai tidak sama atau Boolean.TrueString Boolean.FalseString.
- String yang akan dikonversi menjadi Char nilai terdiri dari beberapa karakter.
- String yang akan dikonversi ke jenis numerik apa pun tidak dikenali sebagai angka yang valid.
- String yang DateTime akan dikonversi ke tidak dikenali sebagai nilai tanggal dan waktu yang valid.
Konversi yang berhasil. Untuk konversi antara dua jenis dasar yang berbeda yang tidak tercantum dalam hasil sebelumnya, semua konversi yang melebar serta semua konversi penyempitan yang tidak mengakibatkan hilangnya data akan berhasil dan metode akan mengembalikan nilai dari jenis dasar yang ditargetkan.
Sebuah OverflowException. Ini terjadi ketika konversi yang mempersempit mengalihkan hilangnya data. Misalnya, mencoba mengonversi Int32 instans yang nilainya 10000 ke Byte jenis melempar OverflowException karena 10000 berada di luar rentang Byte jenis data.
Pengecualian tidak akan dilemparkan jika konversi jenis numerik menghasilkan hilangnya presisi (yaitu, hilangnya beberapa digit yang paling tidak signifikan). Namun, pengecualian akan dilemparkan jika hasilnya lebih besar dari yang dapat diwakili oleh jenis nilai pengembalian metode konversi tertentu.
Misalnya, ketika dikonversi Double menjadi Single, hilangnya presisi mungkin terjadi tetapi tidak ada pengecualian yang dilemparkan. Namun, jika besarnya Double terlalu besar untuk diwakili oleh Single, pengecualian luapan dilemparkan.
Angka non-desimal
Kelas ini Convert mencakup metode statis yang dapat Anda panggil untuk mengonversi nilai integral ke representasi string non-desimal, dan untuk mengonversi string yang mewakili angka non-desimal ke nilai integral. Masing-masing metode konversi ini mencakup base
argumen yang memungkinkan Anda menentukan sistem angka; biner (dasar 2), oktal (dasar 8), dan heksadesimal (basis 16), serta desimal (dasar 10). Ada serangkaian metode untuk mengonversi masing-masing jenis integral primitif yang mematuhi CLS menjadi string, dan satu untuk mengonversi string ke masing-masing jenis integral primitif:
ToString(Byte, Int32) dan ToByte(String, Int32), untuk mengonversi nilai byte ke dan dari string dalam basis tertentu.
ToString(Int16, Int32) dan ToInt16(String, Int32), untuk mengonversi bilangan bulat bertanda 16-bit ke dan dari string dalam basis tertentu.
ToString(Int32, Int32) dan ToInt32(String, Int32), untuk mengonversi bilangan bulat bertanda 32-bit ke dan dari string dalam basis tertentu.
ToString(Int64, Int32) dan ToInt64(String, Int32), untuk mengonversi bilangan bulat bertanda 64-bit ke dan dari string dalam basis tertentu.
ToSByte(String, Int32), untuk mengonversi representasi string dari nilai byte dalam format tertentu ke byte yang ditandatangani.
ToUInt16(String, Int32), untuk mengonversi representasi string bilangan bulat dalam format tertentu menjadi bilangan bulat 16-bit yang tidak ditandatangani.
ToUInt32(String, Int32), untuk mengonversi representasi string bilangan bulat dalam format tertentu ke bilangan bulat 32-bit yang tidak ditandatangani.
ToUInt64(String, Int32), untuk mengonversi representasi string bilangan bulat dalam format tertentu menjadi bilangan bulat 64-bit yang tidak ditandatangani.
Contoh berikut mengonversi nilai Int16.MaxValue menjadi string dalam semua format numerik yang didukung. Kemudian mengonversi nilai string kembali ke Int16 nilai.
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
Konversi dari objek kustom ke jenis dasar
Selain mendukung konversi antara jenis dasar, Convert metode ini mendukung konversi jenis kustom apa pun ke jenis dasar apa pun. Untuk melakukan ini, jenis kustom harus mengimplementasikan IConvertible antarmuka, yang menentukan metode untuk mengonversi jenis penerapan ke masing-masing jenis dasar. Konversi yang tidak didukung oleh jenis tertentu harus melempar .InvalidCastException
ChangeType Ketika metode diteruskan jenis kustom sebagai parameter pertamanya, atau ketika Convert.To
metode Jenis (seperti Convert.ToInt32(Object) atau Convert.ToDouble(Object, IFormatProvider) dipanggil dan melewati instans jenis kustom sebagai parameter pertamanya, Convert metode , pada gilirannya, memanggil implementasi jenis IConvertible kustom untuk melakukan konversi. Untuk informasi selengkapnya, lihat Konversi Jenis di .NET.
Informasi pemformatan khusus budaya
Semua metode konversi jenis dasar dan ChangeType metode termasuk kelebihan beban yang memiliki parameter jenis IFormatProvider. Misalnya, Convert.ToBoolean metode ini memiliki dua kelebihan beban berikut:
Parameter IFormatProvider dapat menyediakan informasi pemformatan khusus budaya untuk membantu proses konversi. Namun, itu diabaikan oleh sebagian besar metode konversi jenis dasar. Ini hanya digunakan oleh metode konversi jenis dasar berikut. null
IFormatProvider Jika argumen diteruskan ke metode ini, CultureInfo objek yang mewakili budaya saat ini digunakan.
Menurut metode yang mengonversi nilai menjadi jenis numerik. Parameter IFormatProvider digunakan oleh kelebihan beban yang memiliki parameter jenis String dan IFormatProvider. Ini juga digunakan oleh kelebihan beban yang memiliki parameter jenis Object dan IFormatProvider jika jenis run-time objek adalah String.
Menurut metode yang mengonversi nilai menjadi tanggal dan waktu. Parameter IFormatProvider digunakan oleh kelebihan beban yang memiliki parameter jenis String dan IFormatProvider. Ini juga digunakan oleh kelebihan beban yang memiliki parameter jenis Object dan IFormatProvider jika jenis run-time objek adalah String.
Convert.ToString Dengan kelebihan beban yang menyertakan IFormatProvider parameter dan yang mengonversi nilai numerik menjadi string atau DateTime nilai menjadi string.
Namun, jenis apa pun yang ditentukan pengguna yang menerapkan IConvertible dapat menggunakan IFormatProvider parameter .
Pengodean Base64
Pengodean Base64 mengonversi data biner menjadi string. Data yang dinyatakan sebagai digit base-64 dapat dengan mudah disampaikan melalui saluran data yang hanya dapat mengirimkan karakter 7-bit. Kelas Convert ini mencakup metode berikut untuk mendukung pengodean base64: Serangkaian metode mendukung konversi array byte ke dan dari String atau ke dan dari array karakter Unicode yang terdiri dari karakter base-64 digit.
- ToBase64String, yang mengonversi array byte menjadi string yang dikodekan base64.
- ToBase64CharArray, yang mengonversi array byte menjadi array karakter yang dikodekan base64.
- FromBase64String, yang mengonversi string yang dikodekan base64 menjadi array byte.
- FromBase64CharArray, yang mengonversi array karakter yang dikodekan base64 menjadi array byte.
Konversi umum lainnya
Anda dapat menggunakan kelas .NET lainnya untuk melakukan beberapa konversi yang tidak didukung oleh metode Convert statis kelas. Ini termasuk:
Konversi ke array byte
Kelas ini BitConverter menyediakan metode yang mengonversi jenis numerik primitif (termasuk Boolean) ke array byte dan dari array byte kembali ke jenis data primitif.
Pengodean dan dekode karakter
Kelas Encoding dan kelas turunannya (seperti UnicodeEncoding dan UTF8Encoding) menyediakan metode untuk mengodekan array karakter atau string (yaitu, untuk mengonversinya menjadi array byte dalam pengodean tertentu) dan untuk mendekode array byte yang dikodekan (yaitu, mengonversi array byte kembali ke karakter Unicode yang dikodekan UTF16). Untuk informasi selengkapnya, lihat Pengodean Karakter di .NET.
Contoh
Contoh berikut menunjukkan beberapa metode konversi di Convert kelas, termasuk ToInt32, , ToBooleandan 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))