【问题标题】:Method 'ToString' of DateTime? has 0 parameter(s)but is invoked with 1 argument(s)DateTime 的方法“ToString”?有 0 个参数,但使用 1 个参数调用
【发布时间】:2017-01-24 08:59:56
【问题描述】:

当我使用 ToString 时,我的 ProcessDate 类型是 DateTime?,它显示了该异常。

dfCalPlanDate.Text = concreteCalPlan.ProcessDate.ToString("d");

感谢您的关注。

【问题讨论】:

  • 取决于 ProcessDate 来自哪里,是来自数据库查询的字段吗?
  • 尝试使用 ProcessDate.Value.ToString
  • @BugFinder 只有类型很重要,而不是它来自哪里。正如 OP 已经提到的,它是 DateTime?

标签: c# datetime tostring nullable


【解决方案1】:

简单:Nullable<T>(因此,Nullable<DateTime>,又名DateTime?)没有方法ToString(String)

您可能想调用DateTime.ToString(String)。要以 null 安全的方式执行此操作,您可以使用 C# 6 的 null-conditional operator ?.

dfCalPlanDate.Text = concreteCalPlan.ProcessDate?.ToString("d");

这是一种简洁的写作方式:

var date = concreteCalPlan.ProcessDate;
dfCalPlanDate.Text = (date == null ? null : date.Value.ToString("d"));

请注意,如果ProcessDatenull,这将产生null。如果在这种情况下需要另一个结果,您可以附加空合并运算符 ??

dfCalPlanDate.Text = concreteCalPlan.ProcessDate?.ToString("d") ?? "no date set";

【讨论】:

  • 这仅适用于 C# 6 应在您的回答中说明。
  • @m.rogalski C# 6 不是“唯一的”。此外,答案的重点是需要访问Value。使用简洁的当前语法实际上是一个奖励
  • @m.rogalski:在您看来,如果没有明确提及,我可以假设的最低 C# 版本应该是什么?
  • @Heinzi 这不是关于什么应该是最低的。但需要说明的是,您的解决方案仅适用于版本 6+,不适用于实现 Nullable<> 时的版本,甚至是常用的版本。
  • @m.rogalski:感谢您的反馈,我已将其添加到我的答案中。
【解决方案2】:

ProcessDate 不是日期时间。 ProcessDate.Value 是。你需要做的:

dfCalPlanDate.Text = concreteCalPlan.ProcessDate.Value.ToString("d");

记得检查日期时间吗?首先有一个值。

【讨论】:

  • if (concretePlan.ProcessDate != null) dfCalPlanDate.Text = concreteCalPlan.ProcessDate.Value.ToString("d");很有用,谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多