“原始类型”与“内置值类型”

时间:2013-05-16 13:42:23

标签: c# types

我最近在使用Array.SetValue(Int32)方法时在C#中发现了一个异常。例外是:

  

由于源代码,无法从源类型扩展到目标类型   type不是原始类型或转换不能   来完成的。

对“原始”这个词的引用让我感到有些惊讶,因为我认为倾向于将这些类型称为内置类型,而“原始类型”一词也是一个非正式术语。 “原始”类型和“内置值类型”之间有什么区别?我没有在C#语言规范中找到原始类型的定义。

1 个答案:

答案 0 :(得分:36)

原语类型未在C#语言规范中定义。它们在.NET本身中定义,而原始类型的最佳参考是直接在MSDN上查看Type.IsPrimitive。具体来说,“备注”部分列出了可用的基元类型。

这里我们有一个完整的参考,这些是CLI Spec中定义的原始类型(第I.8.2.2节):

与流行的看法相反,仅仅因为类型具有相应的关键字使其成为原始类型,最好的示例可能是string

另一方面,值类型也可能是也可能不是原语。除了CLI规范中定义的值之外,.NET Framework还有许多“内置”的值类型,但它们不归类为原语。一个很好的例子是DateTime,它是.NET Framework提供的struct,根据该定义,它可以被视为“内置值类型”。您可以阅读有关值类型的更多信息(当然也会涵盖内置类型)here