2013-08-16 191 views
1

我想要從Object變量中獲取指向的類。例如,如果我有一個StringBuilder對象的實例,我隨後將一個Object變量設置爲,我可以以某種方式知道Object變量指向一個StringBuilder對象嗎?從對象變量中獲取類名

例子:

StringBuilder sbText = New StringBuilder(); 
Object oMyObject = sbText; 
// How can I determine that oMyObject points to an instance of StringBuilder object using only oMyObject 

我在每一個組合使用typeof(oMyObject)oMyObject.GetType()我能想到的,仍然保持想出什麼比Object更多嘗試。 似乎應該有一個相當直接的方式來做到這一點,可能有,但我沒有找到它。

我必須不同意將此標記爲重複問題的用戶與他們提供鏈接的用戶。我的問題的標題可能不是那麼清楚(我現在已經改變了一下),兩者的答案可能涉及相同的方法,但詢問其他問題的用戶正在尋找一種實例化方法一個對象與另一個對象相同。當我只有一個類型爲Object的變量時,我只想找到一個類的名字。我永遠不會拿出Reed通過查看這個問題所提供的答案,並且我不記得它會在本網站或更廣泛的Google搜索中搜索。

回答

4

GetType()應該在運行時提供適當的System.Type對象。

例如,該打印"StringBuilder"

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 

Console.WriteLine(oMyObject.GetType().Name); 

請注意,如果你只是想檢查特定的類類型,is(或as)經常工作更清潔比得到一個Type

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 

//... 

StringBuilder sb = oMyObject as StringBuilder; 
if (sb != null) 
{ 
    // oMyObject was a StringBuilder - you can use sb as needed: 
    sb.AppendText("Foo"); 
} 
+0

感謝里德。第一個例子正是我所期待的。我需要獲取類名(例如:StringBuilder,Widget,MyClass或其他),而無需將其與某些硬編碼的類列表進行比較。這對我所做的事來說是不可能的。再次感謝您的迴應。 – dscarr

0

可能是因爲您正在將Type存儲到對象中。試試這個:

Type myType = sbText.GetType(); 
0

如何確定oMyObject指向StringBuilder對象的實例只使用oMyObject

,如果你需要,你可以做到這一點

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 
if (oMyObject is StringBuilder) 
{ 
    StringBuilder sb = (StringBuilder)oMyObject; // safe now as you know type 
    //your code 
} 

但是,這種獲取對象上需要使用GetType的類型。

0

所有這些都將工作:

StringBuilder sbText = new StringBuilder(); 
Object oMyObject = sbText; 

oMyObject is StringBuilder; 
oMyObject.GetType() == typeof(StringBuilder); 

StringBuilder test = oMyObject as StringBuilder; 
if (test != null) 
{ 
    //Do Work 
}