如何确定变量的类型? (不是对象的类型)

时间:2012-11-21 11:05:44

标签: c# .net visual-studio immediate-window

我在Visual Studio的即时窗口中。有一个变量p。如何推断变量的类型 p

我尝试p.GetType(),但返回对象 p的类型。就我而言,这是一种非常具体的类型(例如,有时为ChessPlayer,有时为TennisPlayer)。我想知道变量的类型,即。确定变量p上可用方法的类型。


编辑:我认为这是一件合理的事情。我正在尝试检查变量p,但我不知道它是!通常在Visual Studio中我只是将鼠标悬停在变量上,它告诉我它的类型,或者我输入.并且自动完成列出了它的方法。然而,这一切都不适用于即时窗口,我所拥有的只是这个变量p我不知道它是什么或我能用它做什么:(

5 个答案:

答案 0 :(得分:5)

c#提供了许多方法:)

要获得特定类型的确切副本,您需要执行此操作

if (p.GetType() == typeof(YourDesiredType))

如果你想知道p是否是你想要的类型的实例那么

if (p is YourDesiredType)

或者你可以试试这个

YourDesiredType ydp = p as YourDesiredType;

就像在这种情况下(因为我不确定在你的场景中是否可能)当OP想要知道编译类型然后我只建议使用通用列表 < / p>

因为通过保持类型安全列表,每个人都可以轻松跟踪其类型

答案 1 :(得分:3)

感到非常困难,最后我写了这个方法,似乎给出了正确的答案。

public static class Extensions
{
    public static Type GetVariableType<T>(this T instance)
    {
        return typeof(T);
    }
}

使用示例:

void Main()
{
    IList x = new List<int>{};
    x.GetVariableType().Dump();
}

打印System.Collections.IList

答案 2 :(得分:1)

作为使用即时窗口的替代方法,如果您只想查看变量的类型,只需添加变量监视并在监视窗口中检查类型。

答案 3 :(得分:0)

System.Object.GetType()

这将返回变量的类型,因为此类位于层次结构的顶部,从中派生每个类。

您还可以检查typeof函数以获取给定实例的确切类型。

答案 4 :(得分:0)

我想你可能需要这个

if (p is ChessPlayer)
{
    ChessPlayer cp = (ChessPlayer)p;

    //Use ChessPlayer methods
}