从对象变量中获取类名

时间:2013-08-16 18:13:16

标签: c# c#-4.0

我想从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搜索。

5 个答案:

答案 0 :(得分:10)

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");
}

答案 1 :(得分:0)

if (oMyObject is StringBuilder) { ... }

答案 2 :(得分:0)

可能是因为您将Type存储到对象中。试试这个:

Type myType = sbText.GetType();

答案 3 :(得分:0)

  

如何仅使用oMyObject确定oMyObject指向StringBuilder对象的实例

你可以这样做

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

但是,如果您需要获取类型,则需要在对象上使用GetType

答案 4 :(得分: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
}