繁体   English   中英

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

[英]“Primitive types” versus “built-in value types”

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM