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, , UInt64UInt32DoubleDecimalDateTime UInt16Singleve 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:
ToString(Byte, Int32) ve ToByte(String, Int32), bir bayt değerini belirtilen bir tabandaki bir dizeye ve dizeden dönüştürmek için.
ToString(Int16, Int32) ve ToInt16(String, Int32), 16 bit imzalı tamsayıyı belirtilen tabandaki bir dizeye ve dizeden dönüştürmek için.
ToString(Int32, Int32) ve ToInt32(String, Int32), 32 bit imzalı tamsayıyı belirtilen tabandaki bir dizeye ve dizeden dönüştürmek için.
ToString(Int64, Int32) ve ToInt64(String, Int32), 64 bit imzalı bir tamsayıyı belirtilen tabandaki bir dizeye ve dizeden dönüştürmek için.
ToSByte(String, Int32), belirtilen biçimdeki bir bayt değerinin dize gösterimini imzalı bayta dönüştürmek için.
ToUInt16(String, Int32), belirtilen biçimdeki bir tamsayı dize gösterimini işaretsiz bir 16 bit tamsayıya dönüştürmek için.
ToUInt32(String, Int32), belirtilen biçimdeki bir tamsayı dize gösterimini işaretsiz 32 bit tamsayıya dönüştürmek için.
ToUInt64(String, Int32), belirtilen biçimdeki bir tamsayı dize gösterimini işaretsiz bir 64 bit tamsayıya dönüştürmek için.
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 null
IFormatProvider 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 UnicodeEncoding UTF8Encoding) 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))