我正在使用某人的SDK,但该文档没有告诉我某个结构或类。
我怎么知道呢? typeof
或GetType
只显示名称。
我想在IDE(VS2010)中找到它;通过编码的方法也是可以接受的。
答案 0 :(得分:7)
从编程上讲,您可以使用GetType().IsValueType
。
在Visual Studio中,您还可以使用对象浏览器进行检查(如下所示,位于View - >对象浏览器下)。
答案 1 :(得分:-1)
如上所述,您可以通过在类型对象上调用IsValueType
来查明泛型类型是类类型还是值类型。但请注意,测试对象实例是否为值类型没有意义。虽然C#会假装引用类型字段可以包含值类型实例,但这是一种幻觉。对于每个值类型,都有一个具有相同名称和字段的相应类类型。在包含对此类实例的引用的存储位置上调用GetType().IsValueType
将报告为true,即使存储位置实际上包含对类对象的引用。这可以通过实现变异接口的结构很容易地证明(例如List<string>.Enumerator
,我简称为LSE
)。
存储在LSE
类型变量中的LSE
将表现为值类型。将要将列表的第三项返回的LSE
复制到另一个类型LSE
的变量将产生第二个独立的枚举器,它也将返回第三项。可以从任一枚举器读取项目而不影响另一个。相反,如果一个变量的类型为IEnumerable<string>
,其中包含对LSE
的引用,另一个将其复制到另一个类型为IEnumerable<string>
的变量,则其中一个将具有对< i>相同的枚举器。从一个调查员中读取项目也会推进另一个调查员。换句话说,将LSE
复制到引用类型的存储位置会产生一些行为类似于引用类型的东西,因为在封面下它实际上是一个。
请注意,在存储位置调用GetType
不会显示它是否包含实数值类型,或者它是否包含与值类型关联的类的对象。在前一种情况下,系统将创建与值类型关联的类的新实例,并在其上调用GetType
,因此在这两种情况下,GetType
调用实际上将在类类型上处理实例