虽然不是一个直接的答案,但IsPrimitive
的文档列出了原始类型:
http://msdn.microsoft.com/en-us/library/system.type.isprimitive.aspx
这里有一个类似的问题:
http://bytes.com/topic/c-sharp/answers/233001-typeof-decimal-isprimitive-false-bug-feature
Jon Skeet所引用的回答:
CLR不需要有任何关于十进制类型的内在知识——它只把它视为另一种值类型,恰好具有重载运算符。例如,没有直接操作十进制数的IL指令。
对我来说,decimal
似乎是语言/运行时想要符合CLS/CLI标准必须存在的一种类型(因此被称为“基元”因为它是具有关键字支持的基类型),但实际实现并不要求它真正成为“基本”类型(因为CLR不认为它是原始数据类型)。
Decimal是一种128位的数据类型,在计算机硬件上无法本地表示。例如,64位计算机体系结构通常具有整数和寻址寄存器,其宽度为64位,可以直接支持64位的数据类型和地址。
维基百科指出:
根据语言及其实现的情况,原始数据类型可能与计算机内存中的对象存在一对一或非一对一的对应关系。然而,人们通常希望在基本原始数据类型上进行的操作是最快速的语言构造。
在十进制的情况下,它只是一个复合数据类型,内部使用整数,因此其性能比直接与计算机内存相关的数据类型(如int、double等)要慢。
double
和long
?我的意思是CLR可能不考虑这种原始类型的定义。 - Adam Houldsworth
decimal
列为原始类型。在VB中尝试我的片段也返回了false
。也许VB的规范存在错误(或者已经过时了...)! - Guillaumestring
,在我看来应该被视为原始类型,因为它和Array
是仅有的两种可变大小的类型,并且它的存储方式与Array
不同。 - supercat