当前位置: 首页 > 知识库问答 >
问题:

在可为空的 DateTime 对象上使用 ToShortDateString() 方法时会出现一些问题,为什么?

戈建白
2023-03-14

我有以下问题。

在一个类中,我声明:

vulnerabilityDetailsTable.AddCell(new PdfPCell(new Phrase(currentVuln.Published.ToString(), _fontNormale)) { Border = PdfPCell.NO_BORDER, Padding = 5, MinimumHeight = 30, PaddingTop = 10 });

有趣的是:currentVuln。Published.ToString()。这工作很好。

Published是声明为可空的日期时间属性,其方式如下:

public System.DateTime? Published { get; set; }

问题是,在前面的方法中,currentVuln的打印值。Published.ToString()类似于18/07/2014 00:00:00(时间也包含在日期中)。

我只想显示日期,不想显示时间,所以我尝试使用类似的方式:

currentVuln.Published.ToShortDateString()

但它不起作用,我在Visual Studio中获得以下错误消息:

错误4'System.Nullable

这似乎是因为我的DateTime字段是可空的。

我错过了什么?如何解决此问题?

共有3个答案

陆博易
2023-03-14

值类型<code>可为空

此类型<code>可为空

这就是为什么您现有的代码是合法的。

类型< code >可为空

currentVuln.Published.ToShortDateString()    /* error */

你将需要

currentVuln.Published.HasValue ? currentVuln.Published.Value.ToShortDateString() : ""

或者等效地

currentVuln.Published != null ? currentVuln.Published.Value.ToShortDateString() : ""

(两者在运行时做的都一样)。如果您愿意,可以将字符串< code>""更改为其他名称,如< code >“never”或< code >“not published”。

如果 Publish 属性(其 get 访问器)被调用两次可能是一个问题,则需要在某个地方取出一个临时变量 var publish = currentVuln.Publish;,然后使用:published。哈斯值 ?发表。Value.ToShortDateString() : “”

曾瀚昂
2023-03-14

以防其他人遇到此线程。您可以使用.value.ToShortDateString()。这将解决这个问题。

许鸿志
2023-03-14

您是对的,这是因为您的日期时间字段可为空。

DateTime的扩展方法不适用于DateTime,但要理解原因,您必须认识到实际上没有日期时间 类。

最常见的是,我们使用< code >?语法,如< code>DateTime?,< code>int?,等等。但这只是< code>Nullable的语法糖

public Nullable<DateTime> Published { get; set; }

所有这些明显独立的<code>可空</code>类型都来自一个泛型<code>可以空

  • HasValue(用于测试基础包装类型是否具有值),以及
  • (用于访问该基础值,假设有一个)

首先检查以确保有一个值,然后使用<code>value</code>属性访问基础类型(在本例中为<code>DateTime</code>),以及通常可用于该类型的任何方法

if (currentVuln.Published.HasValue)
{
    // not sure what you're doing with it, so I'll just assign it...

    var shortDate = currentVuln.Published.Value.ToShortDateString();
}

对于C#6.0及更高版本,您可以使用null条件而不是。值

    var shortDate = currentVuln.Published?.ToShortDateString();
 类似资料:
  • 问题内容: 我的Firebase数据库中具有以下JSON结构: 我正在阅读以下代码: 但是我得到这个错误: 线程中的异常:无法反弹以键入 如何将用户读入Java对象? 问题答案: Firebase使用Jackson允许将Java对象序列化为JSON,并允许将JSON反序列化为Java对象。你可以在Jackson网站上找到有关Jackson的更多信息,以及此页面上有关Jackson注释的信息。 在此

  • 问题内容: 表单提交后,我将返回一些搜索结果。一切正常,直到我到达一个名为SMALLDATETIME并允许为NULL的字段。返回的行中至少有一个字段为NULL。正如您在下面的代码中看到的那样,当它不为NULL时,我会将其从Date转换为String没问题,但是对于包含NULL的行,我收到一条错误消息。 有任何想法吗? 代码: 错误信息: 警告:date_format()期望参数1为DateTime

  • 在这里,我试图访问数据帧上的(LanguageWorkedWith)列,并在其中包含Python时对其进行过滤。 但它一直产生这样的错误: 我以前在不同的列上使用过str.contains()方法,它很有效。我很高兴知道为什么它对一个人有效,对另一个人无效。

  • 我想在RxJava中实现一个下载一些文件的处理队列。我想下载的文件数量可能高达100个左右。 一切都是在Android上使用RxJava 1.1.1开发的 我做错了什么?

  • 看到这个错误: ] 所以,流程是这样的: > 界面ReviewApi- 类 ReviewRepository @Inject constructor( private val reviewApi: ReviewApi ) @HiltViewModel类 ReviewViewModel @Inject constructor(private val repository: ReviewReposit

  • 我使用的是spring boot和spring data dynamodb。当从dynamodb获取数据时,我得到了NullPointerException。这是我的实体课程 元对象类 这就是DynamoDb中存在的东西 我估计地图有问题。请引导。我的仓库类, 我使用这个方法findMyEntityByHashKeyAndSortKey来获取数据, 异常日志 为什么它会给出NullPointerE