İngilizce dilinde oku

Aracılığıyla paylaş


Convert.ChangeType Yöntem

Tanım

Değeri belirtilen bir nesneye eşdeğer olan belirtilen türde bir nesne döndürür.

Aşırı Yüklemeler

ChangeType(Object, Type)

Belirtilen türde ve değeri belirtilen nesneye eşdeğer olan bir nesnesi döndürür.

ChangeType(Object, TypeCode)

Değeri belirtilen nesneye eşdeğer olan belirtilen türde bir nesne döndürür.

ChangeType(Object, Type, IFormatProvider)

Değeri belirtilen nesneye eşdeğer olan belirtilen türde bir nesne döndürür. Parametre kültüre özgü biçimlendirme bilgileri sağlar.

ChangeType(Object, TypeCode, IFormatProvider)

Değeri belirtilen nesneye eşdeğer olan belirtilen türde bir nesne döndürür. Parametre kültüre özgü biçimlendirme bilgileri sağlar.

ChangeType(Object, Type)

Kaynak:
Convert.cs
Kaynak:
Convert.cs
Kaynak:
Convert.cs

Belirtilen türde ve değeri belirtilen nesneye eşdeğer olan bir nesnesi döndürür.

C#
public static object ChangeType (object value, Type conversionType);
C#
public static object? ChangeType (object? value, Type conversionType);

Parametreler

value
Object

IConvertible arabirimini uygulayan bir nesne.

conversionType
Type

Döndürülecek nesnenin türü.

Döndürülenler

Türü conversionType olan ve değeri valueile eşdeğer olan bir nesne.

-veya-

value null ve conversionType bir değer türü değilse null başvuru (Visual Basic'teNothing).

Özel durumlar

Bu dönüştürme desteklenmez.

-veya-

value null ve conversionType bir değer türüdür.

-veya-

value IConvertible arabirimini uygulamaz.

value, conversionTypetarafından tanınan bir biçimde değil.

value, conversionTypearalığının dışında olan bir sayıyı temsil eder.

conversionType null.

Örnekler

Aşağıdaki örnekte ChangeType yönteminin kullanımı gösterilmektedir.

C#
using System;

public class ChangeTypeTest {
    public static void Main() {

        Double d = -2.345;
        int i = (int)Convert.ChangeType(d, typeof(int));

        Console.WriteLine("The double value {0} when converted to an int becomes {1}", d, i);

        string s = "12/12/98";
        DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));

        Console.WriteLine("The string value {0} when converted to a Date becomes {1}", s, dt);
    }
}

Açıklamalar

ChangeType, value tarafından belirtilen nesneyi conversionTypedönüştüren genel amaçlı bir dönüştürme yöntemidir. value parametresi herhangi bir türde bir nesne olabilir ve conversionType herhangi bir temel veya özel türü temsil eden Type bir nesne de olabilir. Dönüştürmenin başarılı olması için valueIConvertible arabirimini uygulaması gerekir çünkü yöntem bir çağrıyı uygun bir IConvertible yöntemine sarmalar. yöntemi, valueconversionType dönüştürmenin desteklenmesi gerekir.

Bu yöntem, dönüştürme için geçerli iş parçacığının kültürünü kullanır.

Arayanlara Notlar

ChangeType(Object, Type) yöntemi bir numaralandırma değerini başka bir türe dönüştürebilir. Ancak, kaynak türü numaralandırmanın temel türü olsa bile başka bir türü numaralandırma değerine dönüştüremez. Bir türü numaralandırma değerine dönüştürmek için bir atama işleci (C#'ta) veya dönüştürme işlevi (Visual Basic'te) kullanın. Aşağıdaki örnek, Continent numaralandırma değerine dönüştürmeyi gösterir.

C#
using System;

public enum Continent
{
   Africa, Antarctica, Asia, Australia, Europe,
   NorthAmerica, SouthAmerica
};

public class Example
{
   public static void Main()
   {
      // Convert a Continent to a Double.
      Continent cont = Continent.NorthAmerica;
      Console.WriteLine("{0:N2}",
                        Convert.ChangeType(cont, typeof(Double)));

      // Convert a Double to a Continent.
      Double number = 6.0;
      try {
         Console.WriteLine("{0}",
                           Convert.ChangeType(number, typeof(Continent)));
      }
      catch (InvalidCastException) {
         Console.WriteLine("Cannot convert a Double to a Continent");
      }

      Console.WriteLine("{0}", (Continent) number);
   }
}
// The example displays the following output:
//       5.00
//       Cannot convert a Double to a Continent
//       SouthAmerica

ChangeType(Object, Type) yöntemi null atanabilir bir türü başka bir türe dönüştürebilir. Ancak, conversionTypeNullable<T>temel alınan türü olsa bile başka bir türü null atanabilir türde bir değere dönüştüremez. Dönüştürmeyi gerçekleştirmek için bir atama işleci (C#'de) veya bir dönüştürme işlevi (Visual Basic'te) kullanabilirsiniz. Aşağıdaki örnekte, null atanabilir bir türe ve türünden dönüştürme gösterilmektedir.

C#
using System;

public class Example
{
   public static void Main()
   {
      int? intValue1 = 12893;
      double dValue1 = (double) Convert.ChangeType(intValue1, typeof(Double));
      Console.WriteLine("{0} ({1})--> {2} ({3})", intValue1, intValue1.GetType().Name,
                        dValue1, dValue1.GetType().Name);

      float fValue1 = 16.3478f;
      int? intValue2 = (int) fValue1;
      Console.WriteLine("{0} ({1})--> {2} ({3})", fValue1, fValue1.GetType().Name,
                        intValue2, intValue2.GetType().Name);
   }
}
// The example displays the following output:
//    12893 (Int32)--> 12893 (Double)
//    16.3478 (Single)--> 16 (Int32)

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

ChangeType(Object, TypeCode)

Kaynak:
Convert.cs
Kaynak:
Convert.cs
Kaynak:
Convert.cs

Değeri belirtilen nesneye eşdeğer olan belirtilen türde bir nesne döndürür.

C#
public static object? ChangeType (object? value, TypeCode typeCode);
C#
public static object ChangeType (object value, TypeCode typeCode);

Parametreler

value
Object

IConvertible arabirimini uygulayan bir nesne.

typeCode
TypeCode

Döndürülecek nesnenin türü.

Döndürülenler

Temel türü typeCode olan ve değeri valueile eşdeğer olan bir nesne.

-veya-

value null ve typeCodeEmptyise, Stringveya Objectnull başvuru (Visual Basic'teNothing).

Özel durumlar

Bu dönüştürme desteklenmez.

-veya-

value null ve typeCode bir değer türü belirtir.

-veya-

value IConvertible arabirimini uygulamaz.

value, typeCode türü tarafından tanınan bir biçimde değil.

value, typeCode türü aralığının dışında olan bir sayıyı temsil eder.

typeCode geçersiz.

Örnekler

Aşağıdaki örnekte, bir Object mümkünse TypeCode parametresi tarafından belirtilen türe değiştirmek için ChangeType(Object, TypeCode) yönteminin nasıl kullanılacağı gösterilmektedir.

C#
using System;

public class ChangeTypeTest {
    public static void Main() {

        Double d = -2.345;
        int i = (int)Convert.ChangeType(d, TypeCode.Int32);

        Console.WriteLine("The Double {0} when converted to an Int32 is {1}", d, i);

        string s = "12/12/2009";
        DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));

        Console.WriteLine("The String {0} when converted to a Date is {1}", s, dt);
    }
}
// The example displays the following output:
//    The Double -2.345 when converted to an Int32 is -2
//    The String 12/12/2009 when converted to a Date is 12/12/2009 12:00:00 AM

Açıklamalar

ChangeType(Object, TypeCode), value tarafından belirtilen nesneyi typeCodetarafından belirtilen önceden tanımlanmış bir türe dönüştüren genel amaçlı bir dönüştürme yöntemidir. value parametresi herhangi bir türde bir nesne olabilir. Dönüştürmenin başarılı olması için valueIConvertible arabirimini uygulaması gerekir çünkü yöntem bir çağrıyı uygun bir IConvertible yöntemine sarmalar. yöntemi, valuetypeCode dönüştürmenin de desteklenmesine ihtiyaç duyar.

ChangeType(Object, TypeCode) yöntemi, value özel bir türe dönüştürülmesini desteklemez. Böyle bir dönüştürme gerçekleştirmek için ChangeType(Object, Type) yöntemini çağırın.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

ChangeType(Object, Type, IFormatProvider)

Kaynak:
Convert.cs
Kaynak:
Convert.cs
Kaynak:
Convert.cs

Değeri belirtilen nesneye eşdeğer olan belirtilen türde bir nesne döndürür. Parametre kültüre özgü biçimlendirme bilgileri sağlar.

C#
public static object ChangeType (object value, Type conversionType, IFormatProvider provider);
C#
public static object? ChangeType (object? value, Type conversionType, IFormatProvider? provider);

Parametreler

value
Object

IConvertible arabirimini uygulayan bir nesne.

conversionType
Type

Döndürülecek nesnenin türü.

provider
IFormatProvider

Kültüre özgü biçimlendirme bilgileri sağlayan bir nesne.

Döndürülenler

Türü conversionType olan ve değeri valueile eşdeğer olan bir nesne.

-veya-

value ve conversionTypeType eşitse value.

-veya-

value null ve conversionType bir değer türü değilse null başvuru (Visual Basic'teNothing).

Özel durumlar

Bu dönüştürme desteklenmez.

-veya-

value null ve conversionType bir değer türüdür.

-veya-

value IConvertible arabirimini uygulamaz.

value, providertarafından tanınan conversionType biçiminde değildir.

value, conversionTypearalığının dışında olan bir sayıyı temsil eder.

conversionType null.

Örnekler

Aşağıdaki örnek, IConvertible arabirimini uygulayan bir Temperature sınıfını tanımlar.

C#
using System;
using System.Globalization;

public class Temperature : IConvertible
{
   private decimal m_Temp;

   public Temperature(decimal temperature)
   {
      this.m_Temp = temperature;
   }

   public decimal Celsius
   {
      get { return this.m_Temp; }
   }

   public decimal Kelvin
   {
      get { return this.m_Temp + 273.15m; }
   }

   public decimal Fahrenheit
   {
      get { return Math.Round((decimal) (this.m_Temp * 9 / 5 + 32), 2); }
   }

   public override string ToString()
   {
      return m_Temp.ToString("N2") + "°C";
   }

   // IConvertible implementations.
   public TypeCode GetTypeCode()
   {
      return TypeCode.Object;
   }

   public bool ToBoolean(IFormatProvider provider)
   {
      if (m_Temp == 0)
         return false;
      else
         return true;
   }

   public byte ToByte(IFormatProvider provider)
   {
      if (m_Temp < Byte.MinValue || m_Temp > Byte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Byte type.",
                                                   this.m_Temp));
      else
         return Decimal.ToByte(this.m_Temp);
   }

   public char ToChar(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to Char conversion is not supported.");
   }

   public DateTime ToDateTime(IFormatProvider provider)
   {
      throw new InvalidCastException("Temperature to DateTime conversion is not supported.");
   }

   public decimal ToDecimal(IFormatProvider provider)
   {
      return this.m_Temp;
   }

   public double ToDouble(IFormatProvider provider)
   {
      return Decimal.ToDouble(this.m_Temp);
   }

   public short ToInt16(IFormatProvider provider)
   {
      if (this.m_Temp < Int16.MinValue || this.m_Temp > Int16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int16 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt16(this.m_Temp);
   }

   public int ToInt32(IFormatProvider provider)
      {
      if (this.m_Temp < Int32.MinValue || this.m_Temp > Int32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int32 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt32(this.m_Temp);
   }

   public long ToInt64(IFormatProvider provider)
   {
      if (this.m_Temp < Int64.MinValue || this.m_Temp > Int64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the Int64 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToInt64(this.m_Temp);
   }

   public sbyte ToSByte(IFormatProvider provider)
   {
      if (this.m_Temp < SByte.MinValue || this.m_Temp > SByte.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the SByte type.",
                                                   this.m_Temp));
      else
         return Decimal.ToSByte(this.m_Temp);
   }

   public float ToSingle(IFormatProvider provider)
   {
      return Decimal.ToSingle(this.m_Temp);
   }

   public string ToString(IFormatProvider provider)
   {
      return m_Temp.ToString("N2", provider) + "°C";
   }

   public object ToType(Type conversionType, IFormatProvider provider)
   {
      switch (Type.GetTypeCode(conversionType))
      {
         case TypeCode.Boolean:
            return this.ToBoolean(null);
         case TypeCode.Byte:
            return this.ToByte(null);
         case TypeCode.Char:
            return this.ToChar(null);
         case TypeCode.DateTime:
            return this.ToDateTime(null);
         case TypeCode.Decimal:
            return this.ToDecimal(null);
         case TypeCode.Double:
            return this.ToDouble(null);
         case TypeCode.Int16:
            return this.ToInt16(null);
         case TypeCode.Int32:
            return this.ToInt32(null);
         case TypeCode.Int64:
            return this.ToInt64(null);
         case TypeCode.Object:
            if (typeof(Temperature).Equals(conversionType))
               return this;
            else
               throw new InvalidCastException(String.Format("Conversion to a {0} is not supported.",
                                                            conversionType.Name));
         case TypeCode.SByte:
            return this.ToSByte(null);
         case TypeCode.Single:
            return this.ToSingle(null);
         case TypeCode.String:
            return this.ToString(provider);
         case TypeCode.UInt16:
            return this.ToUInt16(null);
         case TypeCode.UInt32:
            return this.ToUInt32(null);
         case TypeCode.UInt64:
            return this.ToUInt64(null);
         default:
            throw new InvalidCastException(String.Format("Conversion to {0} is not supported.", conversionType.Name));
      }
   }

   public ushort ToUInt16(IFormatProvider provider)
   {
      if (this.m_Temp < UInt16.MinValue || this.m_Temp > UInt16.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt16 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt16(this.m_Temp);
   }

   public uint ToUInt32(IFormatProvider provider)
   {
      if (this.m_Temp < UInt32.MinValue || this.m_Temp > UInt32.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt32 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt32(this.m_Temp);
   }

   public ulong ToUInt64(IFormatProvider provider)
   {
      if (this.m_Temp < UInt64.MinValue || this.m_Temp > UInt64.MaxValue)
         throw new OverflowException(String.Format("{0} is out of range of the UInt64 type.",
                                                   this.m_Temp));
      else
         return Decimal.ToUInt64(this.m_Temp);
   }
}

Aşağıdaki örnek, Temperature sınıfının bir örneğini oluşturur ve .NET tarafından desteklenen temel sayısal türlere ve bir Stringdönüştürmek için ChangeType(Object, Type, IFormatProvider) yöntemini çağırır. ChangeType yönteminin bir çağrıyı kaynak türün IConvertible uygulamasına sarmalandığını gösterir.

C#
public class Example
{
   public static void Main()
   {
      Temperature cool = new Temperature(5);
      Type[] targetTypes = { typeof(SByte), typeof(Int16), typeof(Int32),
                             typeof(Int64), typeof(Byte), typeof(UInt16),
                             typeof(UInt32), typeof(UInt64), typeof(Decimal),
                             typeof(Single), typeof(Double), typeof(String) };
      CultureInfo provider = new CultureInfo("fr-FR");

      foreach (Type targetType in targetTypes)
      {
         try {
            object value = Convert.ChangeType(cool, targetType, provider);
            Console.WriteLine("Converted {0} {1} to {2} {3}.",
                              cool.GetType().Name, cool.ToString(),
                              targetType.Name, value);
         }
         catch (InvalidCastException) {
            Console.WriteLine("Unsupported {0} --> {1} conversion.",
                              cool.GetType().Name, targetType.Name);
         }
         catch (OverflowException) {
            Console.WriteLine("{0} is out of range of the {1} type.",
                              cool, targetType.Name);
         }
      }
   }
}
// The example dosplays the following output:
//       Converted Temperature 5.00°C to SByte 5.
//       Converted Temperature 5.00°C to Int16 5.
//       Converted Temperature 5.00°C to Int32 5.
//       Converted Temperature 5.00°C to Int64 5.
//       Converted Temperature 5.00°C to Byte 5.
//       Converted Temperature 5.00°C to UInt16 5.
//       Converted Temperature 5.00°C to UInt32 5.
//       Converted Temperature 5.00°C to UInt64 5.
//       Converted Temperature 5.00°C to Decimal 5.
//       Converted Temperature 5.00°C to Single 5.
//       Converted Temperature 5.00°C to Double 5.
//       Converted Temperature 5.00°C to String 5,00°C.

Açıklamalar

ChangeType, value tarafından belirtilen nesneyi conversionTypedönüştüren genel amaçlı bir dönüştürme yöntemidir. value parametresi herhangi bir türde bir nesne olabilir ve conversionType herhangi bir temel veya özel türü temsil eden Type bir nesne de olabilir. Dönüştürmenin başarılı olması için valueIConvertible arabirimini uygulaması gerekir çünkü yöntem bir çağrıyı uygun bir IConvertible yöntemine sarmalar. yöntemi, valueconversionType dönüştürmenin desteklenmesi gerekir.

provider parametresi, dönüştürme için biçimlendirme bilgileri sağlayan IFormatProvider bir uygulamadır. Bu parametrenin kullanılıp kullanılmadığı, temel alınan IConvertible uygulamasına bağlıdır. value bir temel veri türüyse, provider yalnızca aşağıdaki dönüştürmeler için kullanılır:

value uygulama tanımlı bir türse, IConvertible uygulaması provider parametresini kullanabilir.

Arayanlara Notlar

ChangeType(Object, Type, IFormatProvider) yöntemi bir numaralandırma değerini başka bir türe dönüştürebilir. Ancak, kaynak türü numaralandırmanın temel türü olsa bile başka bir türü numaralandırma değerine dönüştüremez. Bir türü numaralandırma değerine dönüştürmek için bir atama işleci (C#'ta) veya dönüştürme işlevi (Visual Basic'te) kullanın. Aşağıdaki örnek, Continent numaralandırma değerine dönüştürmeyi gösterir.

C#
using System;

public enum Continent
{
   Africa, Antarctica, Asia, Australia, Europe,
   NorthAmerica, SouthAmerica
};

public class Example
{
   public static void Main()
   {
      // Convert a Continent to a Double.
      Continent cont = Continent.NorthAmerica;
      Console.WriteLine("{0:N2}",
                        Convert.ChangeType(cont, typeof(Double)));

      // Convert a Double to a Continent.
      Double number = 6.0;
      try {
         Console.WriteLine("{0}",
                           Convert.ChangeType(number, typeof(Continent)));
      }
      catch (InvalidCastException) {
         Console.WriteLine("Cannot convert a Double to a Continent");
      }

      Console.WriteLine("{0}", (Continent) number);
   }
}
// The example displays the following output:
//       5.00
//       Cannot convert a Double to a Continent
//       SouthAmerica

ChangeType(Object, Type, IFormatProvider) yöntemi null atanabilir bir türü başka bir türe dönüştürebilir. Ancak, conversionTypeNullable<T>temel alınan türü olsa bile başka bir türü null atanabilir türde bir değere dönüştüremez. Dönüştürmeyi gerçekleştirmek için bir atama işleci (C#'de) veya bir dönüştürme işlevi (Visual Basic'te) kullanabilirsiniz. Aşağıdaki örnekte, null atanabilir bir türe ve türünden dönüştürme gösterilmektedir.

C#
using System;

public class Example
{
   public static void Main()
   {
      int? intValue1 = 12893;
      double dValue1 = (double) Convert.ChangeType(intValue1, typeof(Double), null);
      Console.WriteLine("{0} ({1})--> {2} ({3})", intValue1, intValue1.GetType().Name,
                        dValue1, dValue1.GetType().Name);

      float fValue1 = 16.3478f;
      int? intValue2 = (int) fValue1;
      Console.WriteLine("{0} ({1})--> {2} ({3})", fValue1, fValue1.GetType().Name,
                        intValue2, intValue2.GetType().Name);
   }
}
// The example displays the following output:
//    12893 (Int32)--> 12893 (Double)
//    16.3478 (Single)--> 16 (Int32)

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

ChangeType(Object, TypeCode, IFormatProvider)

Kaynak:
Convert.cs
Kaynak:
Convert.cs
Kaynak:
Convert.cs

Değeri belirtilen nesneye eşdeğer olan belirtilen türde bir nesne döndürür. Parametre kültüre özgü biçimlendirme bilgileri sağlar.

C#
public static object ChangeType (object value, TypeCode typeCode, IFormatProvider provider);
C#
public static object? ChangeType (object? value, TypeCode typeCode, IFormatProvider? provider);

Parametreler

value
Object

IConvertible arabirimini uygulayan bir nesne.

typeCode
TypeCode

Döndürülecek nesnenin türü.

provider
IFormatProvider

Kültüre özgü biçimlendirme bilgileri sağlayan bir nesne.

Döndürülenler

Temel türü typeCode olan ve değeri valueile eşdeğer olan bir nesne.

-veya-

value null ve typeCodeEmptyise, Stringveya Objectnull başvuru (Visual Basic'teNothing).

Özel durumlar

Bu dönüştürme desteklenmez.

-veya-

value null ve typeCode bir değer türü belirtir.

-veya-

value IConvertible arabirimini uygulamaz.

value, providertarafından tanınan typeCode türü için bir biçimde değildir.

value, typeCode türü aralığının dışında olan bir sayıyı temsil eder.

typeCode geçersiz.

Örnekler

Aşağıdaki örnek, GetFormat yönteminin ne zaman çağrıldığını belirten ve fr-FR kültürü için bir NumberFormatInfo ve en-US kültürü için bir DateTimeFormatInfo nesnesi döndüren InterceptProvider adlı özel biçim sağlayıcısını tanımlar. Bu biçim sağlayıcısı, ChangeType(Object, TypeCode, IFormatProvider) yöntemine yapılan tüm çağrılarda kullanılır. Örnek daha sonra bir Double ve DateTime değeri olan bir dizi oluşturur ve her değer ve TypeCode numaralandırmasının her üyesiyle ChangeType(Object, TypeCode, IFormatProvider) için yinelenen çağrılar yapar. Örnek, yöntemin IFormatProvider parametresini ne zaman kullandığını ve kültüre duyarlı biçimlendirme gerçekleştirmek için provider parametresinin kullanımını gösterir.

C#
using System;
using System.Globalization;

public class InterceptProvider : IFormatProvider
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(NumberFormatInfo)) {
         Console.WriteLine("   Returning a fr-FR numeric format provider.");
         return new System.Globalization.CultureInfo("fr-FR").NumberFormat;
      }
      else if (formatType == typeof(DateTimeFormatInfo)) {
         Console.WriteLine("   Returning an en-US date/time format provider.");
         return new System.Globalization.CultureInfo("en-US").DateTimeFormat;
      }
      else {
         Console.WriteLine("   Requesting a format provider of {0}.", formatType.Name);
         return null;
      }
   }
}

public class Example
{
   public static void Main()
   {
      object[] values = { 103.5d, new DateTime(2010, 12, 26, 14, 34, 0) };
      IFormatProvider provider = new InterceptProvider();

      // Convert value to each of the types represented in TypeCode enum.
      foreach (object value in values)
      {
         // Iterate types in TypeCode enum.
         foreach (TypeCode enumType in ((TypeCode[]) Enum.GetValues(typeof(TypeCode))))
         {
            if (enumType == TypeCode.DBNull || enumType == TypeCode.Empty) continue;

            try {
               Console.WriteLine("{0} ({1}) --> {2} ({3}).",
                                 value, value.GetType().Name,
                                 Convert.ChangeType(value, enumType, provider),
                                 enumType.ToString());
            }
            catch (InvalidCastException) {
               Console.WriteLine("Cannot convert a {0} to a {1}",
                                 value.GetType().Name, enumType.ToString());
            }
            catch (OverflowException) {
               Console.WriteLine("Overflow: {0} is out of the range of a {1}",
                                 value, enumType.ToString());
            }
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//    103.5 (Double) --> 103.5 (Object).
//    103.5 (Double) --> True (Boolean).
//    Cannot convert a Double to a Char
//    103.5 (Double) --> 104 (SByte).
//    103.5 (Double) --> 104 (Byte).
//    103.5 (Double) --> 104 (Int16).
//    103.5 (Double) --> 104 (UInt16).
//    103.5 (Double) --> 104 (Int32).
//    103.5 (Double) --> 104 (UInt32).
//    103.5 (Double) --> 104 (Int64).
//    103.5 (Double) --> 104 (UInt64).
//    103.5 (Double) --> 103.5 (Single).
//    103.5 (Double) --> 103.5 (Double).
//    103.5 (Double) --> 103.5 (Decimal).
//    Cannot convert a Double to a DateTime
//       Returning a fr-FR numeric format provider.
//    103.5 (Double) --> 103,5 (String).
//
//    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (Object).
//    Cannot convert a DateTime to a Boolean
//    Cannot convert a DateTime to a Char
//    Cannot convert a DateTime to a SByte
//    Cannot convert a DateTime to a Byte
//    Cannot convert a DateTime to a Int16
//    Cannot convert a DateTime to a UInt16
//    Cannot convert a DateTime to a Int32
//    Cannot convert a DateTime to a UInt32
//    Cannot convert a DateTime to a Int64
//    Cannot convert a DateTime to a UInt64
//    Cannot convert a DateTime to a Single
//    Cannot convert a DateTime to a Double
//    Cannot convert a DateTime to a Decimal
//    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (DateTime).
//       Returning an en-US date/time format provider.
//    12/26/2010 2:34:00 PM (DateTime) --> 12/26/2010 2:34:00 PM (String).

Açıklamalar

ChangeType(Object, TypeCode, IFormatProvider), value tarafından belirtilen nesneyi typeCodetarafından belirtilen önceden tanımlanmış bir türe dönüştüren genel amaçlı bir dönüştürme yöntemidir. value parametresi herhangi bir türde bir nesne olabilir. Dönüştürmenin başarılı olması için valueIConvertible arabirimini uygulaması gerekir çünkü yöntem bir çağrıyı uygun bir IConvertible yöntemine sarmalar. yöntemi, valuetypeCode dönüştürmenin de desteklenmesine ihtiyaç duyar.

ChangeType(Object, TypeCode, IFormatProvider) yöntemi, value özel bir türe dönüştürülmesini desteklemez. Böyle bir dönüştürme gerçekleştirmek için ChangeType(Object, Type, IFormatProvider) yöntemini çağırın.

provider parametresi, dönüştürme için biçimlendirme bilgileri sağlayan IFormatProvider bir uygulamadır. Bu parametrenin kullanılıp kullanılmadığı, temel alınan IConvertible uygulamasına bağlıdır. value bir temel veri türüyse, provider yalnızca aşağıdaki dönüştürmeler için kullanılır. Bu yöntemlere bir nullIFormatProvider bağımsız değişkeni geçirilirse, geçerli kültürü temsil eden CultureInfo nesnesi kullanılır.

value uygulama tanımlı bir türse, IConvertible uygulaması provider parametresini kullanabilir.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0