【问题标题】:Is DateTime a primitive type?DateTime 是原始类型吗?
【发布时间】:2015-01-01 10:24:30
【问题描述】:

根据我能找到的,我相信DateTime 是一个原始类型,但是当我检查我的DateTime 变量时,属性IsPrimitive 是假的。

7.3 Primitive Types(archive.org 镜像)

在上面的文章中,您会看到他们说DateTime 是原始的。那么我做错了什么还是我读错了文章?

【问题讨论】:

  • "Date 值类型是原始类型,表示日期和/或时间,映射到 System.DateTime"
  • 这篇文章是一篇Visual Basic文章。
  • typeof(DateTime).IsPrimitive 也会返回 false
  • 你为什么在乎?是否原始在实践中完全无关紧要。 DateTime 只是一个值类型。
  • 这个问题应该得到更多的信任。令人惊讶的是,在 C# 中没有直接等效于 VB.NET 的 Date,而且不知道有多少人至少花了很短的时间来寻找它。

标签: c# primitive primitive-types


【解决方案1】:

MSDN page on IsPrimitive 列出了就该方法而言被视为原始的 .net 类型:

原始类型有布尔、字节、SByte、Int16、UInt16、Int32、 UInt32、Int64、UInt64、IntPtr、UIntPtr、Char、Double 和 Single。

而 DateTime 不在此列表中。

【讨论】:

    【解决方案2】:

    Date(映射到System.DateTime)是Visual Basic .NET 语言(简称VB.NET)的原始类型。

    它不是 C# 中的原始类型,也不是 CLR 中的原始类型。

    给定语言的原始类型是您可以为其编写字符串文字的类型,并且编译器将这个文字理解为相关类型。您不能在 C# 中对 DateTime 执行此操作。

    CLR 的原始类型是允许进行一些低级优化的类型。它非常受限制:只有字符串以及不同的整数和浮点数结构是原始类型。

    【讨论】:

    • 我不会调用decimal 原语,尽管编译器具有魔力。在谈论 C# 时,我会避免使用“原始”一词,因为规范没有正确定义它。在 CLR 级别,它至少定义了这个概念,但仍然没有什么实际意义。
    • 对于 CLR,String 不是原始的,因为typeof(string).IsPrimitive 是假的。
    • @CodesInChaos 我同意! C# 语言规范提到 预定义的结构类型,它们与 CLR 认为的原始类型有很大的交集。尽管这两个集合都不包含在另一个集合中。当然,C# 也有用于“预定义”类型stringobjectdynamic 的关键字,但它们是引用类型。最后,特殊类型 void 在 C# 中有自己的关键字,但显然 C# 不认为它是结构类型,CLR 也不认为它是原始类型。 void 是异常值类型。
    【解决方案3】:

    使用Type.IsPrimitive 来确定一个类型是否是原始类型。

    对于您的特定问题,您可以尝试DateTime.Now.GetType().IsPrimitive。 (这确实返回false)。 已接受答案中的链接指的是 Visual Basic 语言规范原语类型 ...

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 2019-12-15
      • 2021-03-07
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多