[英]Does Convert.ChangeType Shortcut?
我想知道当object
type
与type
相匹配时Object Convert.ChangeType( Object object, Type type)
内部会发生什么。 它只是捷径并返回object
吗?
例如:
object objString = "Hello World";
string converted = (string) Convert.ChangeType( objString, typeof ( String ) );
ChangeType
的实现会实际调用IConvertible
接口还是只返回objString?
根据Microsoft的C#参考源 , Convert.ChangeType(Object, Type)
执行以下一般行为:
IConvertible
ToWhatever
方法。
return this
,否则return Convert.ToWhatever(this)
,这是一种排序的快捷方式。 ToType
,以传递类型。 是的,它将在对象上调用IConvertible接口。 如果是字符串,它将调用objString.ToString(),而objString.ToString()随后将返回自身(返回此值)。
另外,如果对象类型未实现IConvertible,而您转换为相同类型,则它将仅返回相同对象。
如果type不实现IConvertible,而您将其转换为其他类型,则将引发异常。
此MSDN博客文章可能会为您提供帮助。
如果该类实现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
·布尔值
·ToByte
·托查
·ToDateTime
·十进制
·ToDouble
·ToInt16
·ToInt32
·ToInt64
·ToSByte
·ToSingle
·ToString
· 输入
·ToUInt16
·ToUInt32
·ToUInt64
System.Convert类具有许多实现,而这些实现又可以由实现IConvertible接口的类调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.