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 , , , , , , Int16, Int32, , Int64, , UInt64UInt32DoubleDecimalDateTimeUInt16Singleve Stringtürleridir.BooleanByteSByteChar 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, türünde Int32bir bağımsız değişkenle çağrı Convert.ToInt32(Int32) yapılarak) 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 oluşturulur:

  • 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.FalseStringdeğerine eşit Boolean.TrueString 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 oluşur. Örneğin, değeri 10000 olan bir Int32 örneği türe Byte dönüştürmeye çalışmak, 10000 veri türü aralığının Byte dışında olduğundan bir OverflowException oluşturur.

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 öğesine dönüştürüldüğünde Singleduyarlık kaybı oluşabilir ancak özel durum oluşmaz. Ancak, öğesinin Double büyüklüğü bir Singleile temsil edilemeyecek kadar büyükse taşma özel durumu oluşturulur.

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:

Aşağıdaki örnek, değerini Int16.MaxValue desteklenen tüm sayısal biçimlerde bir dizeye dönüştürür. 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("{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

Ö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 InvalidCastExceptionoluşturmalıdır.

ChangeType Yöntem ilk parametresi olarak özel bir tür geçirildiğinde veya Type yöntemi (örneğin Convert.ToInt32(Object) veya Convert.ToDouble(Object, IFormatProvider) çağrıldığında ve ilk parametresi olarak bir özel türün örneğine geçirildiğindeConvert.To), Convert yöntem de dönüştürmeyi gerçekleştirmek için ö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. Yalnızca aşağıdaki temel tür dönüştürme yöntemleri tarafından kullanılır. 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, ve IFormatProvidertüründe String parametreleri olan aşırı yükleme tarafından kullanılır. Ayrıca, türünde Object parametreleri olan aşırı yükleme tarafından ve IFormatProvider nesnenin çalışma zamanı türü bir Stringise kullanılır.

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

  • Convert.ToString Bir parametre içeren ve sayısal bir IFormatProvider değeri dizeye veya DateTime bir değeri dizeye dönüştüren aşırı yüklemeler tarafından.

Ancak, uygulayan IConvertible kullanıcı tanımlı herhangi bir tür parametresini IFormatProvider 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, taban-64 basamaklı karakterlerden oluşan bir Unicode karakter dizisine ve bir diziden veya öğesine dönüştürmeyi 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. Bu modüller ş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, , ToBooleanve ToStringdahil olmak üzere ToInt32sınıfındaki Convert 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 {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))