有时候,在Razor视图中,我正在做类似以下的事情:
@Model.SomeDate1.ToString("MM/dd/yyyy")
这有时会起作用,有时它会给我一个错误,即ToString没有重载需要1个参数。我发现的答案与此处的内容类似: 'No overload for method 'ToString' takes '1' arguments' error occur While Formatting Datetime Field To String ON "dd-MM-yyyy" format
我知道发生此错误时,我总是可以将我的声明修改为
@Model.SomeDate2.Value.ToString("MM/dd/yyyy")
它会起作用。我的问题是,为什么在这种情况下会发生这种情况?这些属性在同一对象上同时使用相同类型(不可为空的DateTime),从同一数据库中的同一个表填充。只有一个在.Value
之前需要.ToString()
而另一个不需要{{1}}。这是为什么?
答案 0 :(得分:3)
你的SomeDate2是可以为空的,如果你对可以为空的ToString()不允许使用格式字符串。 SomeDate1是正常的DateTime,因此它可以工作,对于SomeDate2,您需要使用SomeDate2.Value。但是别忘了检查HasValue: - )
答案 1 :(得分:3)
对于确定其中一个属性是Nullable(DateTime?)。只有这样你才会收到错误。
Nullable<DateTime>
或DateTime?
没有ToString
重载,它带有格式参数。您应该检查Nullable<DateTime>
是否有某些值,如:
if(SomeDate2.HasValue)
{
return SomeDate2.Value.ToString("MM/dd/yyyy");
}
如果您不确定自己的财产,无论是Nullable<T>
还是CultureInfo.InvariantCulture
,您都可以看到this post来确定。
在使用ToString
时也请考虑使用/
,否则您最终可能会在输出字符串中使用与 return SomeDate2.Value.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);
不同的分隔符。
{{1}}