Aracılığıyla paylaş


System.Convert sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Statik Convert sınıf öncelikli olarak .NET'teki temel veri türlerine ve bu türlerden dönüştürmeyi desteklemek için kullanılan yöntemleri içerir. Desteklenen temel türler Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime ve String türleridir. Buna ek olarak, Convert sınıfı diğer tür dönüştürmeleri desteklemek için yöntemler içerir.

Temel türlere ve türlerden dönüştürmeler

Her temel türü diğer her temel türe dönüştürmek için bir dönüştürme yöntemi vardır. Ancak, belirli bir dönüştürme yöntemine yapılan gerçek çağrı, çalışma zamanındaki temel türün değerine ve hedef taban türüne bağlı olarak beş sonuçtan birini üretebilir. Bu beş sonuç şunlardır:

  • Dönüştürme yok. Bu durum, bir türden kendisine dönüştürme girişiminde bulunulduğunda (örneğin, bir Convert.ToInt32(Int32) türündeki bağımsız değişken ile Int32 çağrıldığında) oluşur. Bu durumda yöntemi yalnızca özgün türün bir örneğini döndürür.

  • Bir InvalidCastException. Bu, belirli bir dönüştürme desteklenmediğinde oluşur. Aşağıdaki dönüştürmeler için bir InvalidCastException fırlatılır:

  • Bir FormatException. Bu, dize değerini başka bir temel türe dönüştürme girişimi, dize düzgün biçimde olmadığından başarısız olduğunda oluşur. Aşağıdaki dönüştürmeler için özel durum oluşturulur:

    • Bir değere dönüştürülecek dize Boolean veya Boolean.TrueStringdeğerine eşit Boolean.FalseString değildir.
    • Bir değere dönüştürülecek dize Char birden çok karakterden oluşur.
    • Herhangi bir sayısal türe dönüştürülecek dize geçerli bir sayı olarak tanınmaz.
    • 'a DateTime dönüştürülecek dize geçerli bir tarih ve saat değeri olarak tanınmaz.
  • Başarılı bir dönüştürme. Önceki sonuçlarda listelenmeyen iki farklı temel tür arasındaki dönüştürmeler için, tüm genişletme dönüştürmelerinin yanı sıra veri kaybına neden olmayan tüm daraltma dönüştürmeleri başarılı olur ve yöntem hedeflenen temel türün değerini döndürür.

  • Bir OverflowException. Bu durum, daraltma dönüştürmesi veri kaybına neden olduğunda meydana gelir. Örneğin, değeri 10000 olan bir Int32 örneğini bir Byte türüne dönüştürmeye çalışmak, 10000'in OverflowException veri türü aralığının dışında olması nedeniyle bir Byte hatası atar.

Sayısal bir türün dönüştürülmesi duyarlık kaybına (yani, bazı en az önemli basamakların kaybına) neden olursa bir özel durum oluşturulmayacak. Ancak, sonuç belirli bir dönüştürme yönteminin dönüş değeri türü tarafından temsil edilebilenden büyükse bir özel durum oluşturulur.

Örneğin, bir Double öğesi Single öğesine dönüştürüldüğünde kesinlik kaybı oluşabilir ancak istisna atılmaz. Ancak, Double'ın büyüklüğü bir Single ile temsil edilemeyecek kadar büyükse, bir taşma istisnası fırlatılır.

Ondalık olmayan sayılar

sınıfı, Convert tamsayı değerlerini ondalık olmayan dize gösterimlerine dönüştürmek ve ondalık olmayan sayıları temsil eden dizeleri tam sayı değerlerine dönüştürmek için çağırabileceğiniz statik yöntemler içerir. Bu dönüştürme yöntemlerinin her biri, sayı sistemini belirtmenize olanak tanıyan bir base bağımsız değişken içerir: ikili (taban 2), sekizli (8 tabanı) ve onaltılık (16 tabanı) ve ondalık (10 tabanı). CLS uyumlu ilkel integral türlerinin her birini bir dizeye ve bir dizeyi ilkel integral türlerinin her birine dönüştürmek için bir yöntem kümesi vardır:

Int16.MaxValue değerini desteklenen tüm sayısal biçimlerde bir dizeye dönüştüren aşağıdaki örnektir. Ardından dize değerini bir Int16 değere geri dönüştürür.

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

Özel nesnelerden temel türlere dönüştürmeler

yöntemi, temel türler arasındaki dönüştürmeleri desteklemeye ek olarak, Convert herhangi bir özel türün herhangi bir temel türe dönüştürülmesi destekler. Bunu yapmak için özel türün, uygulama türünü temel türlerin IConvertible her birine dönüştürme yöntemlerini tanımlayan arabirimini uygulaması gerekir. Belirli bir tür tarafından desteklenmeyen dönüştürmeler bir InvalidCastException oluşturmalıdır.

ChangeType yöntemi, ilk parametre olarak özel bir tür geçirildiğinde veya Convert.ToType yöntemi (örneğin Convert.ToInt32(Object) veya Convert.ToDouble(Object, IFormatProvider)) çağrıldığında ve ilk parametre olarak özel bir türün örneği geçirildiğinde, Convert yöntemi, dönüştürmeyi gerçekleştirmek için sırayla özel türün IConvertible uygulamasını çağırır. Daha fazla bilgi için bkz . .NET'te Tür Dönüştürme.

Kültüre özgü biçimlendirme bilgileri

Tüm temel tür dönüştürme yöntemleri ve ChangeType yöntemi, türünde IFormatProviderbir parametresi olan aşırı yüklemeleri içerir. Örneğin, Convert.ToBoolean yönteminde aşağıdaki iki aşırı yükleme vardır:

parametresi, IFormatProvider dönüştürme işlemine yardımcı olmak için kültüre özgü biçimlendirme bilgileri sağlayabilir. Ancak, temel tür dönüştürme yöntemlerinin çoğu tarafından yoksayılır. Sadece aşağıdaki temel tip dönüştürme yöntemleri bu kullanım içindir. Bu yöntemlere bir nullIFormatProvider bağımsız değişken geçirilirse, CultureInfo geçerli kültürü temsil eden nesne kullanılır.

  • Bir değeri sayısal bir türe dönüştüren yöntemlere göre. IFormatProvider parametresi, String türünde ve IFormatProvider parametreleri olan aşırı yükleme tarafından kullanılır. Ayrıca, parametreleri Object ve IFormatProvider olan bir aşırı yükleme tarafından ve nesnenin çalışma zamanı türü bir String ise kullanılır.

  • Bir değeri tarih ve saate dönüştüren yöntemlere göre. IFormatProvider parametresi, String türünde ve IFormatProvider parametreleri olan aşırı yükleme tarafından kullanılır. Ayrıca, parametreleri Object ve IFormatProvider olan bir aşırı yükleme tarafından ve nesnenin çalışma zamanı türü bir String ise kullanılır.

  • Convert.ToString parametresini içeren ve sayısal bir değeri ya da bir IFormatProvider değerini dizeye dönüştüren aşırı yüklemeler tarafından.

Ancak, IConvertible uygulayan herhangi bir kullanıcı tanımlı tür, IFormatProvider parametresini kullanabilir.

Base64 kodlaması

Base64 kodlaması, ikili verileri bir dizeye dönüştürür. Taban-64 basamak olarak ifade edilen veriler, yalnızca 7 bit karakter aktarabilen veri kanalları üzerinden kolayca iletilebilir. Convert sınıfı, base64 kodlamasını desteklemek için aşağıdaki yöntemleri içerir: Bir dizi yöntem, bir bayt String dizisini base64 basamaklı karakterlerden oluşan bir Unicode karakter dizisine dönüştürmeyi ve bunun tersini destekler.

  • ToBase64String, bayt dizisini base64 ile kodlanmış bir dizeye dönüştürür.
  • ToBase64CharArray, bayt dizisini base64 kodlanmış karakter dizisine dönüştürür.
  • FromBase64String, base64 ile kodlanmış bir dizeyi bayt dizisine dönüştürür.
  • FromBase64CharArray, base64 ile kodlanmış bir karakter dizisini bayt dizisine dönüştürür.

Diğer yaygın dönüştürmeler

Sınıfın statik yöntemleri tarafından desteklenmeyen bazı dönüştürmeler gerçekleştirmek için diğer .NET sınıflarını Convert kullanabilirsiniz. Bunlar şunlardır:

  • Bayt dizilerine dönüştürme

    sınıfı, BitConverter ilkel sayısal türleri (dahil) Booleanbayt dizilerine ve bayt dizilerinden ilkel veri türlerine geri dönüştüren yöntemler sağlar.

  • Karakter kodlama ve kod çözme

    Encoding sınıfı ve türetilmiş sınıfları (ve gibi UnicodeEncodingUTF8Encoding) bir karakter dizisini veya dizeyi (belirli bir kodlamadaki bayt dizisine dönüştürmek için) ve kodlanmış bir bayt dizisinin kodunu çözme (yani, bayt dizisini UTF16 ile kodlanmış Unicode karakterlerine dönüştürme) için yöntemler sağlar. Daha fazla bilgi için bkz . .NET'te Karakter Kodlama.

Örnekler

Aşağıdaki örnekte, , Convertve ToInt32dahil olmak üzere ToBooleansınıfındaki ToString bazı dönüştürme yöntemleri gösterilmektedir.

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