2010-12-21 33 views
1

在下面的代碼:typeof()參數 - 它是如何工作的?

string GetName(Type type)  
{  
    return ((type)this.obj).Name;  
}  

void Run()  
{  
    string name = GetName(typeof(MyClass));  
} 

即時得到一個「的類型或名稱空間無法找到(是否缺少使用指令或程序集引用?)」的錯誤。我該怎麼做才能糾正這個問題?

+3

你到底想幹什麼? – VdesmedT 2010-12-21 11:13:14

+0

您是否正確使用正確名稱空間的頂部? – 2010-12-21 11:13:33

+0

'(type)(this.object).Name;'看起來完全錯誤 - Update'方法試圖做什麼? – 2010-12-21 11:17:03

回答

7

您無法投射到實例!

類型爲類型類的實例,如果你想轉換爲某種類型,使用泛型

void GetName<T>() where T : IObjectWithName { return ((T)this.object).Name; } 

,那麼你可以調用

string name = GetName<MyClass>(); 

如果使SENS。

+0

它引入了一個額外的接口,OP可能不希望如果有許多不同的類與Name屬性。 – Simone 2010-12-21 11:24:09

+0

是的,如果有很多不同的課程呢? – 2010-12-21 11:33:57

+0

@Lemuel Adane:然後他們只需要實現IObjectWithName。也許我們可以幫助你進一步,如果你解釋你準備做什麼。 – VdesmedT 2010-12-21 13:22:45

1

你不能做到這樣,你需要思考做一些像你問的:

void Update(Type type) 
{ 
    PropertyInfo info = type.GetProperty("Name"); 
    string name = info.GetValue(info, null); 
} 
相關問題