从对象变量中获取类名

本文关键字:获取 对象 变量 | 更新日期: 2023-09-27 18:28:07

我想从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类型的变量时,我只是在寻找获取类名称的方法。我永远不会通过看这个问题得到里德提供的答案,我也不记得这个问题曾出现在这个网站的搜索或更广泛的谷歌搜索中。

从对象变量中获取类名

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

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

Type myType = sbText.GetType();

如何仅使用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。

所有这些都可以工作:

StringBuilder sbText = new StringBuilder();
Object oMyObject = sbText;
oMyObject is StringBuilder;
oMyObject.GetType() == typeof(StringBuilder);
StringBuilder test = oMyObject as StringBuilder;
if (test != null)
{
  //Do Work
}
if (oMyObject is StringBuilder) { ... }