Convert.ChangeType 方法

定义

返回一个指定类型的对象,其值等效于指定对象。

重载

ChangeType(Object, Type)

返回指定类型的对象,其值等效于指定对象。

ChangeType(Object, TypeCode)

返回一个指定类型的对象,其值等效于指定的对象。

ChangeType(Object, Type, IFormatProvider)

返回一个指定类型的对象,其值等效于指定的对象。 参数提供区域性特定的格式设置信息。

ChangeType(Object, TypeCode, IFormatProvider)

返回一个指定类型的对象,其值等效于指定的对象。 参数提供区域性特定的格式设置信息。

ChangeType(Object, Type)

Source:
Convert.cs
Source:
Convert.cs
Source:
Convert.cs

返回指定类型的对象,其值等效于指定对象。

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

参数

value
Object

实现 IConvertible 接口的对象。

conversionType
Type

要返回的对象的类型。

返回

一个对象,其类型为 conversionType,其值等效于 value

-或-

如果 valuenullconversionType 不是值类型,则为 null 引用(在 Visual Basic 中Nothing)。

例外

不支持此转换。

-或-

valuenullconversionType 是值类型。

-或-

value 不实现 IConvertible 接口。

value 的格式不是由 conversionType识别的格式。

value 表示 conversionType范围外的数字。

conversionType null

示例

以下示例演示了如何使用 ChangeType 方法。

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

注解

ChangeType 是一种通用转换方法,用于将 value 指定的对象转换为 conversionTypevalue 参数可以是任何类型的对象,conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。 若要成功转换,value 必须实现 IConvertible 接口,因为该方法只是包装对适当 IConvertible 方法的调用。 该方法要求支持将 value 转换为 conversionType

此方法使用当前线程的区域性进行转换。

调用方说明

ChangeType(Object, Type) 方法可以将枚举值转换为另一种类型。 但是,即使源类型是枚举的基础类型,它也无法将另一种类型转换为枚举值。 若要将类型转换为枚举值,请使用强制转换运算符(以 C#为单位)或转换函数(在 Visual Basic 中)。 以下示例演示 Continent 枚举值的转换。

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) 方法可以将可以为 null 的类型转换为另一种类型。 但是,即使 conversionTypeNullable<T>的基础类型,它也不能将另一种类型转换为可为 null 类型的值。若要执行转换,可以使用强制转换运算符(在 C# 中)或转换函数(在 Visual Basic 中)。 下面的示例演示了转换到可为 null 的类型和从其转换。

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)

适用于

.NET 9 和其他版本
产品 版本
.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)

Source:
Convert.cs
Source:
Convert.cs
Source:
Convert.cs

返回一个指定类型的对象,其值等效于指定的对象。

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

参数

value
Object

实现 IConvertible 接口的对象。

typeCode
TypeCode

要返回的对象的类型。

返回

一个对象,其基础类型为 typeCode,其值等效于 value

-或-

如果 valuenulltypeCodeEmptyStringObject,则为 null 引用(在 Visual Basic 中Nothing)。

例外

不支持此转换。

-或-

value nulltypeCode 指定值类型。

-或-

value 不实现 IConvertible 接口。

value 的格式不是由 typeCode 类型识别的格式。

value 表示 typeCode 类型的范围外的数字。

typeCode 无效。

示例

以下示例演示如何使用 ChangeType(Object, TypeCode) 方法将 Object 更改为 TypeCode 参数指定的类型(如果可能)。

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

注解

ChangeType(Object, TypeCode) 是一种常规用途转换方法,用于将 value 指定的对象转换为由 typeCode指定的预定义类型。 value 参数可以是任何类型的对象。 若要成功转换,value 必须实现 IConvertible 接口,因为该方法只是包装对适当 IConvertible 方法的调用。 该方法还要求支持将 value 转换为 typeCode

ChangeType(Object, TypeCode) 方法不支持将 value 转换为自定义类型。 若要执行此类转换,请调用 ChangeType(Object, Type) 方法。

适用于

.NET 9 和其他版本
产品 版本
.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)

Source:
Convert.cs
Source:
Convert.cs
Source:
Convert.cs

返回一个指定类型的对象,其值等效于指定的对象。 参数提供区域性特定的格式设置信息。

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

参数

value
Object

实现 IConvertible 接口的对象。

conversionType
Type

要返回的对象的类型。

provider
IFormatProvider

提供区域性特定的格式设置信息的对象。

返回

一个对象,其类型为 conversionType,其值等效于 value

-或-

value,如果 valueconversionTypeType 相等。

-或-

如果 valuenullconversionType 不是值类型,则为 null 引用(在 Visual Basic 中Nothing)。

例外

不支持此转换。

-或-

valuenullconversionType 是值类型。

-或-

value 不实现 IConvertible 接口。

value 的格式不是由 provider识别的 conversionType

value 表示 conversionType范围外的数字。

conversionType null

示例

以下示例定义实现 IConvertible 接口的 Temperature 类。

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

以下示例创建 Temperature 类的实例,并调用 ChangeType(Object, Type, IFormatProvider) 方法,将其转换为 .NET 支持的基本数值类型,并将其转换为 String。 它说明 ChangeType 方法包装对源类型的 IConvertible 实现的调用。

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.

注解

ChangeType 是一种通用转换方法,用于将 value 指定的对象转换为 conversionTypevalue 参数可以是任何类型的对象,conversionType 也可以是表示任何基类型或自定义类型的 Type 对象。 若要成功转换,value 必须实现 IConvertible 接口,因为该方法只是包装对适当 IConvertible 方法的调用。 该方法要求支持将 value 转换为 conversionType

provider 参数是一个 IFormatProvider 实现,它提供转换的格式设置信息。 是否以及如何使用此参数取决于基础 IConvertible 实现。 如果 value 是基数据类型,则 provider 仅用于以下转换:

如果 value 是应用程序定义的类型,则其 IConvertible 实现可以使用 provider 参数。

调用方说明

ChangeType(Object, Type, IFormatProvider) 方法可以将枚举值转换为另一种类型。 但是,即使源类型是枚举的基础类型,它也无法将另一种类型转换为枚举值。 若要将类型转换为枚举值,请使用强制转换运算符(以 C#为单位)或转换函数(在 Visual Basic 中)。 以下示例演示 Continent 枚举值的转换。

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) 方法可以将可以为 null 的类型转换为另一种类型。 但是,即使 conversionTypeNullable<T>的基础类型,它也不能将另一种类型转换为可为 null 类型的值。 若要执行转换,可以使用强制转换运算符(在 C# 中)或转换函数(在 Visual Basic 中)。 下面的示例演示了转换到可为 null 的类型和从其转换。

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)

适用于

.NET 9 和其他版本
产品 版本
.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)

Source:
Convert.cs
Source:
Convert.cs
Source:
Convert.cs

返回一个指定类型的对象,其值等效于指定的对象。 参数提供区域性特定的格式设置信息。

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

参数

value
Object

实现 IConvertible 接口的对象。

typeCode
TypeCode

要返回的对象的类型。

provider
IFormatProvider

提供区域性特定的格式设置信息的对象。

返回

一个对象,其基础类型为 typeCode,其值等效于 value

-或-

如果 valuenulltypeCodeEmptyStringObject,则为 null 引用(在 Visual Basic 中Nothing)。

例外

不支持此转换。

-或-

value nulltypeCode 指定值类型。

-或-

value 不实现 IConvertible 接口。

value 的格式不是由 provider识别的 typeCode 类型。

value 表示 typeCode 类型的范围外的数字。

typeCode 无效。

示例

以下示例定义一个名为 InterceptProvider 的自定义格式提供程序,该提供程序指示何时调用其 GetFormat 方法,并返回 fr-FR 区域性的 NumberFormatInfo,以及 en-US 区域性的 DateTimeFormatInfo 对象。 此格式提供程序用于对 ChangeType(Object, TypeCode, IFormatProvider) 方法的所有调用。 然后,该示例创建一个具有 DoubleDateTime 值的数组,并重复调用 ChangeType(Object, TypeCode, IFormatProvider) 以及 TypeCode 枚举的每个成员。 该示例演示了该方法何时使用 IFormatProvider 参数,并说明了如何使用 provider 参数执行区分区域性的格式设置。

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

注解

ChangeType(Object, TypeCode, IFormatProvider) 是一种常规用途转换方法,用于将 value 指定的对象转换为由 typeCode指定的预定义类型。 value 参数可以是任何类型的对象。 若要成功转换,value 必须实现 IConvertible 接口,因为该方法只是包装对适当 IConvertible 方法的调用。 该方法还要求支持将 value 转换为 typeCode

ChangeType(Object, TypeCode, IFormatProvider) 方法不支持将 value 转换为自定义类型。 若要执行此类转换,请调用 ChangeType(Object, Type, IFormatProvider) 方法。

provider 参数是一个 IFormatProvider 实现,它提供转换的格式设置信息。 是否以及如何使用此参数取决于基础 IConvertible 实现。 如果 value 是基数据类型,则 provider 仅用于以下转换。 如果将 nullIFormatProvider 参数传递给这些方法,则使用表示当前区域性的 CultureInfo 对象。

如果 value 是应用程序定义的类型,则其 IConvertible 实现可以使用 provider 参数。

适用于

.NET 9 和其他版本
产品 版本
.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