2012-12-18 244 views
0

考慮我的代碼:鑄造從類型類型

public class MyClass 
{ 
//... 
} 

object ob = new MyClass(); 
Type t = ob.GetType(); 

有了這些信息,我需要在運行時投obMyClass。 我該怎麼做?

+1

關於SO的數以百萬計的類似問題;)爲什麼在編譯時你不知道對象的類型? –

+0

要使用'(MyClass)ob'來強制使用'ob'來輸入'MyClass'。但這是你問的嗎? –

+0

請告訴*爲什麼*您需要這樣做。 – sloth

回答

0

假設MyClass是在編譯時已知:

object ob = new MyClass(); 

if (ob.GetType() != typeof(MyClass)) 
     MyClass convertedObject = (MyClass)ob; 
+2

我認爲OP在編譯時並不知道它是'MyClass',因爲他使用'GetType'。 –

+0

@TimSchmelter編輯首先檢查ob是否爲MyClass類型 – AssaultingCuccos

+0

然後[@ Blachshma's approach](http://stackoverflow.com/a/13930381/284240)更好。但是你們都假定編譯時知道'MyClass'類型。 –

3

Convert.ChangeType是你在找什麼。

// With ob and t from your example. 
var myClassInstance = Convert.ChangeType(ob, t); 

但是正如有些人所說,最好知道爲什麼你首先需要這個。有可能你的解決方法有一種氣味,它可以更容易地完成,沒有任何類型的功夫。

+0

+ for「type kung-fu」:) –

+2

這個我試過了,但'ChangeType'方法會返回類型'Object',而不是我想要的類型 –