2013-08-16 189 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 
}