【发布时间】:2017-01-30 16:10:07
【问题描述】:
编辑:这个问题是基于 GetType() 返回字符串的误解。
我试图更好地了解 C# 的工作原理,所以这个问题更多的是理论而不是实际。
据我了解,对值类型调用 GetType 需要装箱,然后调用该方法。既然值类型不能被继承,但是类型在编译时是已知的,那么为什么编译器不能简单地用字符串字面量替换对 GetType() 的调用呢?
或者这是可以完成的事情,但被认为没有必要,因为无论如何都不需要在未装箱的值类型上调用 GetType?
【问题讨论】:
-
GetType不返回字符串文字,因此您显然不能用字符串文字替换它。 -
我明白了——我正在查看的源代码声称 GetType() 返回一个字符串,这是错误的;它返回实际的 Type 对象。这是在运行时在堆上分配的东西,因此无法在编译时对其进行优化。谢谢!
-
Since value types can't be inherited from, though, the type is known at compile time也不正确。它经常知道,但并不总是知道。 -
@Servy:需要详细说明吗?
-
如果你想要这个:使用
nameof(Foo)而不是foo.GetType().Name或typeof(Foo).Name。