代码之家  ›  专栏  ›  技术社区  ›  Yaroslav Parkhomenko

对象是C#中的基元数据类型吗?复制

  •  -1
  • Yaroslav Parkhomenko  · 技术社区  · 2 年前

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

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

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

    1 回复  |  直到 13 年前
        1
  •  39
  •   Rudi Visser    13 年前

    C#语言规范中没有定义基元类型。它们在中进行了定义。NET本身,而基元类型的最佳参考是直接查看 Type.IsPrimitive 在MSDN上。特别是,“备注”部分列出了可用的基元类型。

    因此,我们在这里得到了一个完整的引用,这些是在 CLI Spec (第I.8.2.2节):

    与流行的观点相反,仅仅因为一个类型有相应的关键字就可以 不 使其成为基元类型,最好的例子可能是 string .

    另一方面,值类型也可以是基元,也可以不是基元。有很多“内置”的值类型。NET Framework,但它们未被归类为基元。一个很好的例子是 DateTime ,这是一个 struct 由提供。NET Framework,根据该定义,它可以被视为“内置值类型”。您可以阅读更多关于值类型的信息(当然也包括内置类型) here .