2012-07-17 92 views
0

我是c#中的新手,所以也許我的問題對你們中的一些人來說似乎太天真了。ChangeType方法中的一些誤解

我使用這種方法:

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

從元數據手冊:

返回:

其類型是conversionType和其值相當於 到值的對象。-or-A 空引用(在Visual Basic中爲Nothing),如果value爲null,並且conversionType 不是值類型。

但是在方法簽名中,返回的類型總是'object'。那麼,如果返回類型是object,那麼轉換該值的好處是什麼?

+1

它應該返回具有您在conversionType中指定的類型的對象嗎?您是否只需要將結果從對象轉換爲所需的類型 – anderhil 2012-07-17 14:50:16

回答

1

原因是你可以投射到你的特定類型。這個方法來自泛型類型之前,所以它可以返回任意數量類型的唯一方法是返回所有類型的超類型,即對象。你當然可以將它轉換成你選擇的類型,並保證你會成功,但唯一的另一種選擇是每一種類型的重載,這會有點重。 :)

需要注意的是,這不僅僅是鑄造。它會返回一個全新的對象,這是您要求的類型,而不是您輸入的類型。

4

Convert.ChangeType創建一個指定類型的新對象,其值等於您傳遞的對象。

例如,Convert.ChangeType("42", typeof(int))將返回盒裝的int實例而不是字符串。

實際行爲完全在您傳遞的對象的IConvertible執行範圍內。

1

在.NET方法有一個固定的簽名(與仿製藥,你可以走的更遠,但這裏並非如此) - 所以這個轉換方法,他們選擇了最常見的類型:object

考慮PersonManMan被定義爲

class Man : Person 

爲了創建一個地址簿,您不會創建兩個方法:

Man GetByName(string name); 
Woman GetByName(string name); 

相反,你將創建一個方法:

Person GetByName(string name); 

此方法將返回一個Person,即使返回的實際對象是Man,但您目前知道的是它是一個Person

回到轉換器:知道你在參數中提供它的返回類型,但很久以前當創建方法時,他們不知道你要提供什麼作爲參數。您可以安全地將結果轉換爲您已知的類型:

MyType myObject = (MyType)ChangeType(value, typeof(MyType));