如您所知,MSDN库说string、decimal和object不是原始类型。我要分享一段关于这一点的话:
原语类型为布尔型、字节类、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double和Single。
我们也可以通过typeof(typeName).IsPrimitive属性来测试它。另外,我还在stackoverflow.com上阅读了关于stackoverflow.com类型的讨论。
现在,我正在通过(第四版)阅读一本名为C# CLR的书,这本书说(在第112页):

正如您所看到的,作者(Jeffrey)提到,所有这些类型都是原始类型。所以,谁能澄清我,他是什么意思?为什么这些string、decimal、object和dynamic类型都在原语列表中?
发布于 2017-12-01 12:15:13
有语言基元Torres和CLR基元类型。语言原语类型是编译器本身测试的特殊类型,如字符串和动态类型。CLR基元类型是其他类型的核心构建块,如布尔或Int32。反射函数IsPrimitive只对CLR原语类型返回true,它不知道用于编写代码的编程语言,因此它无法了解语言基元类型。了解哪些类型是语言基元类型的唯一方法是读取语言规范文档。正如所指出的,在C#中,dynamic是一个C#原语类型,因为编译器测试它是特殊的(它允许特殊的转换规则和动态成员调用)。但是,编译器在运行时将动态转换为对象。CLR根本不知道动态类型。
发布于 2017-12-01 08:57:24
我不会亲自调用dynamic、decimal、object或string原语类型。我会使用Type.IsPrimitive作为规范源。注意,dynamic甚至不是CLR意义上的类型。
C# 5MS规范只使用“原语”两次,一次在介绍中,一次在引号中。即将推出的ECMA C# 5标准根本不使用它。考虑到“原语”一词对CLR类型有很好的定义,并且不是C#标准化术语的一部分,以这种方式使用它似乎是个坏主意。(在某些地方,C#规范和CLR有不同的地方,例如哪些转换可用,结构是否有无参数的构造函数等等。这有点不同,也比较尴尬。)
在标准的C#术语中,有一些简单的类型,但这些类型只是有关键字的值类型。
在C# 5MS规范或描述“关键词描述类型”的ECMA标准中,我看不到任何术语。
https://stackoverflow.com/questions/47589661
复制相似问题