"原始类型"与"内置值类型"

Mis*_*hax 27 c# types

我最近在使用Array.SetValue(Int32)方法时在C#中遇到了异常.例外是:

无法从源类型扩展到目标类型,因为源类型不是基本类型或无法完成转换.

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

Rud*_*ser 36

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

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

流行的看法相反,仅仅因为一个类型都有一个相应的关键字并没有使它成为一个基本类型,最好的例子就是可能string.

另一方面,值类型也可以是原语,也可以不是原语.除了CLI规范中定义的值之外,.NET Framework还有许多"内置"的值类型,但它们不归类为原语.一个很好的例子DateTime,这是一个struct由.NET Framework提供的,由定义可以认为它是一种"内置值类型".您可以在此处阅读有关值类型的更多信息(当然也将涵盖内置类型).