我想知道Object Convert.ChangeType( Object object, Type type)
的类型匹配object
时type
内发生了什么。它只是简短并返回object
?
例如:
object objString = "Hello World";
string converted = (string) Convert.ChangeType( objString, typeof ( String ) );
ChangeType
的实现是否会实际调用IConvertible
接口或只返回objString?
答案 0 :(得分:6)
根据Microsoft's C# reference source,Convert.ChangeType(Object, Type)
执行以下一般行为:
IConvertible
ToWhatever
方法。
return this
,否则为return Convert.ToWhatever(this)
,这是排序的快捷方式。ToType
,将类型传递给。答案 1 :(得分:2)
是的,它会在对象上调用IConvertible接口。 在字符串的情况下,它将调用objString.ToString(),而objString.ToString()将返回自身(返回此)。
此外,如果对象的类型没有实现IConvertible,并且您转换为相同的类型,那么它将只返回相同的对象。
如果type没有实现IConvertible,你转换为不同的类型,那么将抛出异常。
答案 2 :(得分:0)
This MSDN blog article可能会对您有所帮助。
如果该类实现IConvertable接口,则可以使用 System.Convert.ChangeType更改数据类型:
decimal x = (decimal) System.Convert.ChangeType("5", typeof(decimal));
将ChangeType视为一个大的switch语句(在VB中选择大小写)... 有很多重载的功能。像这样的东西(免责声明: 这是一个伪代码,而不是确切的.NET 实施):
public static Object ChangeType(Object value, TypeCode typeCode , IFormatProvider provider)
{
IConvertible v = value as IConvertible;
switch (typeCode) {
case TypeCode.Boolean:
return v.ToBoolean(provider);
case TypeCode.Char:
return v.ToChar(provider);
case TypeCode.SByte:
return v.ToSByte(provider);
case TypeCode.Byte:
return v.ToByte(provider);
case TypeCode.Int16:
return v.ToInt16(provider);
case TypeCode.UInt16:
return v.ToUInt16(provider);
. . .
}
声称实现IConvertible接口的类必须实现 上面的开关结构中的所有转换加上GetTypeCode:
·GetTypeCode
·ToBoolean
·ToByte
·ToChar
·ToDateTime
·ToDecimal
·ToDouble
·ToInt16
·ToInt32
·ToInt64
·ToSByte
·ToSingle
·ToString
·ToType
·ToUInt16
·ToUInt32
·ToUInt64
System.Convert类有许多可以实现的实现 转,由实现IConvertible接口的类调用。