11

我想从 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)or oMyObject.GetType(),但仍然不断想出Object. 似乎应该有一个相当直接的方法来做到这一点,并且可能有,但我没有找到它。

我必须不同意将其标记为与他们提供链接的问题重复的用户。我的问题的标题可能并不像以前那样清晰(我现在已经改变了一点),两者的答案可能涉及相同的方法,但提出另一个问题的用户正在寻找一种实例化的方法一个对象与另一个对象具有相同的类型。当我只有一个 Object 类型的变量时,我只是在寻找获取类名的方法。通过查看该问题,我永远不会想出 Reed 提供的答案,而且我不记得它曾经出现在该网站的搜索或更广泛的 Google 搜索中。

4

5 回答 5

21

GetType()应该在运行时提供对象的正确性System.Type

例如,这打印"StringBuilder"

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

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

请注意,如果您只想检查特定的类类型,is(or 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");
}
于 2013-08-16T18:15:04.123 回答
0

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

Type myType = sbText.GetType();
于 2013-08-16T18:15:16.030 回答
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的类型。

于 2013-08-16T18:17:37.910 回答
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
}
于 2013-08-16T18:19:14.970 回答
-1
if (oMyObject is StringBuilder) { ... }
于 2013-08-16T18:14:59.877 回答