Bagikan melalui


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.TrueStringBoolean.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:

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.Tometode 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. nullIFormatProvider Jika argumen diteruskan ke metode ini, CultureInfo objek yang mewakili budaya saat ini digunakan.

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))