我正在寻找如何获取变量的编译时类型以进行调试。
测试环境可以简单地复制:
object x = "this is actually a string";
Console.WriteLine(x.GetType());
将输出System.String
。我怎么能在这里获得编译时类型System.Object
?
我看了一眼System.Reflection
,但却失去了它所提供的各种可能性。
答案 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)
将为您提供编译时类型object
。 typeof
将不允许您传入变量以获取其类型。
此方法也可以作为扩展方法实现,以便与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
}