如何获取变量的编译时类型?

时间:2014-07-23 09:21:05

标签: c# .net types compile-time object-type

我正在寻找如何获取变量的编译时类型以进行调试。

测试环境可以简单地复制:

object x = "this is actually a string";
Console.WriteLine(x.GetType());

将输出System.String。我怎么能在这里获得编译时类型System.Object

我看了一眼System.Reflection,但却失去了它所提供的各种可能性。

1 个答案:

答案 0 :(得分:18)

我不知道是否有内置方法可以做到这一点,但以下通用方法可以解决这个问题:

void Main()
{
    object x = "this is actually a string";
    Console.WriteLine(GetCompileTimeType(x));
}

public Type GetCompileTimeType<T>(T inputObject)
{
    return typeof(T);
}

此方法将返回类型System.Object,因为泛型类型都是在编译时完成的。

只是添加我假设您知道如果您需要在编译时硬编码typeof(object)将为您提供编译时类型objecttypeof将不允许您传入变量以获取其类型。

此方法也可以作为扩展方法实现,以便与object.GetType方法类似地使用:

public static class MiscExtensions
{
    public static Type GetCompileTimeType<T>(this T dummy)
    { return typeof(T); }
}

void Main()
{
    object x = "this is actually a string";
    Console.WriteLine(x.GetType()); //System.String
    Console.WriteLine(x.GetCompileTimeType()); //System.Object
}