[英]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.