我们通过我们正在扩展的基本类型和复杂类型来分离扩展方法类。我的问题很简单。将Guid与string,int,DateTime等一起视为原始类型吗?或者在描述它时会被认为是一种复杂的类型吗?
在回顾了答案之后,我非常感谢我能够从一些答案中收集到的澄清。然而,我的印象是好奇心<罢工>杀死了猫让猫被谋杀了,所以我投票决定关闭我自己的问题。
答案 0 :(得分:4)
这取决于你所谓的“原始数据类型”。
Wikipedia列出了这两个定义:
根据第一个,Guid
是一个构造类型,不一个原语。
根据第二个,它也是不一个基本类型(因为它在BCL中提供,在System
命名空间中,并且不是由任何.NET定义的语言)。
更新
这就是Type
类的IsPrimitive
方法所说的内容:
基本类型包括Boolean,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,IntPtr,UIntPtr,Char,Double和Single。
因此,就.NET而言,不是一种原始类型。
总结:根据上述三个单独的标准,Guid
绝对不是原始类型。
答案 1 :(得分:2)
根据你的定义,Guid将是一个原始的。它是一个类似int
,DateTime
的结构。它也由System
命名空间中的.NET Framework提供。另外,它是不可变的,如string
和DateTime
。
根据.NET的定义,它不是。
请参阅http://msdn.microsoft.com/en-us/library/system.type.isprimitive.aspx
我会将其归为与int
,DateTime
和string
相同的类别。
答案 2 :(得分:2)
这个问题的答案有些模糊。
语言规范声明:
也可以使用结构和运算符重载来实现C#语言中的新“原始”类型
这似乎意味着Guid
是一种“原始”类型。但是,Type
提供了IsPrimitive
属性,typeof(Guid).IsPrimitive
将返回false
。
但请注意,Guid
不是由语言提供的,而是由.NET Framework提供的。
语言规范还指出C#中的原始类型是Boolean
(bool
),Byte
(byte
),SByte
({{1 }}),sbyte
(Int16
),short
,UInt16
(Int32
),UInt32(int
),uint
(Int64
),UInt64(long
),ulong
,IntPtr
,UIntPtr
(Char
),char
({{ 1}})和Double
(double
)明显地遗漏了Single
和single
。
我会完全丢失描述符“primitive”,只是将DateTime
称为值类型。
答案 3 :(得分:0)
这取决于你所谓的“原始类型”。 Type Fundamentals文章说:“编译器直接支持的任何数据类型都称为基本类型。”我不希望编译器“知道”System.Guid
。
文章Primitive data types in C#未在原始类型中列出System.Guid
。
有人可能认为它必须是复合类型,因为它是一个由多个其他基元组成的128位实体。
我会说GUID不是原始类型,但你可能会得到其他不同意我的人。