C# Convert.ChangeType是否为快捷方式?
我想知道当对象的类型与类型匹配时,Object Convert.ChangeType对象、Type类型内部会发生什么。它只是捷径和返回对象吗 例如:C# Convert.ChangeType是否为快捷方式?,c#,.net,C#,.net,我想知道当对象的类型与类型匹配时,Object Convert.ChangeType对象、Type类型内部会发生什么。它只是捷径和返回对象吗 例如: object objString = "Hello World"; string converted = (string) Convert.ChangeType( objString, typeof ( String ) ); ChangeType的实现实际上是调用IConvertible接口还是只返回objString?是的,它将调用对象上的
object objString = "Hello World";
string converted = (string) Convert.ChangeType( objString, typeof ( String ) );
ChangeType的实现实际上是调用IConvertible接口还是只返回objString?是的,它将调用对象上的IConvertible接口。 对于string,它将调用objString.ToString,而objString.ToString又会返回这个字符串 此外,如果对象的类型没有实现IConvertible,并且您转换为相同的类型,那么它将只返回相同的对象
如果类型未实现IConvertible,并且您转换为其他类型,则将引发异常。是,它将调用对象上的IConvertible接口。 对于string,它将调用objString.ToString,而objString.ToString又会返回这个字符串 此外,如果对象的类型没有实现IConvertible,并且您转换为相同的类型,那么它将只返回相同的对象 若类型未实现IConvertible,而您转换为其他类型,则会引发异常。可能会对您有所帮助 如果类实现了IConvertable接口,则可以使用 System.Convert.ChangeType更改数据类型: 把ChangeType看作VB中一个大的switch语句select case… 有很多重载函数。类似于以下免责声明: 这是一个伪代码,而不是.NET的 实施: 声明实现IConvertible接口的类必须实现 上述交换机结构中的所有转换加上GetTypeCode: ·GetTypeCode ·托布利安 ·托比特 ·托卡尔 ·今天 ·今天的 ·加倍 ·ToInt16 ·ToInt32 ·ToInt64 ·托斯比特 ·托辛格尔 ·托斯特林 ·打字 ·图因特16 ·图因特32 ·图因特64 Convert类有许多实现,可以在 turn,由实现IConvertible接口的类调用 也许对你有帮助 如果类实现了IConvertable接口,则可以使用 System.Convert.ChangeType更改数据类型: 把ChangeType看作VB中一个大的switch语句select case… 有很多重载函数。类似于以下免责声明: 这是一个伪代码,而不是.NET的 实施: 声明实现IConvertible接口的类必须实现 上述交换机结构中的所有转换加上GetTypeCode: ·GetTypeCode ·托布利安 ·托比特 ·托卡尔 ·今天 ·今天的 ·加倍 ·ToInt16 ·ToInt32 ·ToInt64 ·托斯比特 ·托辛格尔 ·托斯特林 ·打字 ·图因特16 ·图因特32 ·图因特64 Convert类有许多实现,可以在 turn,由实现IConvertible接口的类调用 根据Convert.ChangeTypeObject,Type执行以下一般行为: 如果输入为空 如果类型是值类型,则抛出。 否则返回null。 如果输入不可转换 如果类型正好是输入的类型,则返回输入。 否则就扔。 如果该类型是开箱即用型芯可转换类型之一,请在输入上调用相应的ToWhatever方法。 在每种情况下,如果类型匹配,则实现似乎返回这个,否则返回Convert.ToWhateverthis,这是排序的快捷方式。 否则,对输入调用ToType,并将类型传递给。 根据Convert.ChangeTypeObject,Type执行以下一般行为: 如果输入为空 如果类型是值类型,则抛出。 否则返回null。 如果输入不可转换 如果类型正好是输入的类型,则返回输入。 否则就扔。 如果该类型是开箱即用型芯可转换类型之一,请在输入上调用相应的ToWhatever方法。 在每种情况下,如果类型匹配,则实现似乎返回这个,否则返回Convert.ToWhateverthis,这是排序的快捷方式。 否则,对输入调用ToType,并将类型传递给。
好的,但字符串只是一个例子。对于Int64如何。同样的事情:Convert.ChangeTypemyInt64,typeOfIn64调用myInt64.ToInt64
myInt从reflector返回MyInt64,看起来对于核心IConvertible实现者,X.ToY被实现为return Convert.ToYthis,除了X==Y之外,它被实现为return this。谢谢@Rawling,我想这就是我想要的答案。好吧,但string只是一个例子。对于Int64,情况如何。同样:Convert.ChangeTypemyInt64,typeOfIn64调用myInt64.ToInt64myInt从reflector返回myInt64,对于核心IConvertible实现程序,X.ToY实现为return Convert.ToYthis,除了X==Y,在这里它被实现为return this。这是达到这个程度的捷径。谢谢@Rawling,我想这就是我想要的答案。这和Convert.ChangeType一样吗?哇,我是说ChangeType。这和Convert.ChangeType一样吗?哇,我是说ChangeType。
decimal x = (decimal) System.Convert.ChangeType("5", typeof(decimal));
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);
. . .
}