我们通过扩展的原始类型和复杂类型来分离扩展方法类。我的问题很简单。 Guid 是否会与 string、int、DateTime 等一起被视为原始类型?或者描述它时会被认为是复杂类型吗?
查看答案后,我非常感谢我能够从一些答案中收集到的澄清。然而,我的印象是好奇心害死猫害死了猫,所以我投票结束我自己的问题。
这取决于您所说的“原始数据类型”。
维基百科列出了这两个定义:
根据第一个,
Guid
是构造类型,不是原语。
根据第二个,它也不是原始类型(因为它是在 BCL 中的
System
命名空间中提供的,并且不是由任何 .NET 语言定义的)。
更新:
这就是 IsPrimitive
类的
Type
方法所说的:
基本类型有 Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double 和 Single。
因此,就 .NET 而言,它不是原始类型。
结论:根据上述三个单独的标准,
Guid
绝对不是原始类型。
这个问题的答案有点模糊。
语言规范指出:
还可以使用结构体和运算符重载在 C# 语言中实现新的“原始”类型
这似乎暗示
Guid
是一种“原始”类型。然而 Type
提供了 IsPrimitive
属性,并且 typeof(Guid).IsPrimitive
将返回 false
。
但请注意,
Guid
不是由语言提供的,而是由 .NET Framework 提供的。
语言规范还规定,C# 中的基本类型为
Boolean
(bool
)、Byte
(byte
)、SByte
(sbyte
)、Int16
(short
)、 UInt16
、Int32
(int
)、UInt32 (uint
)、Int64
(long
)、UInt64 (ulong
)、IntPtr
、UIntPtr
、Char
() char
)、Double
(double
) 和 Single
(single
) 值得注意的是,省略了 DateTime
和 Guid
。
我会完全丢失描述符“原始”,而只将
Guid
称为值类型。
Type Fundamentals文章中说:“编译器直接支持的任何数据类型都称为原始类型。”。我不希望编译器“知道”System.Guid
。文章
C# 中的原始数据类型 并未将 System.Guid
列为原始类型。有人可能会说它必须是复合类型,因为它是由多个其他原语组成的 128 位实体。
我想说 GUID 不是原始类型,但你可能会得到其他人不同意我的观点。