首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可空日期异常处理-有更好的方法吗?

可空日期异常处理-有更好的方法吗?
EN

Stack Overflow用户
提问于 2012-09-20 07:17:03
回答 4查看 1.1K关注 0票数 0

在尝试处理无效或空日期输入时,我遇到了这个问题。

对于普通的DateTime变量,我可以这样做

代码语言:javascript
复制
DateTime d = new DateTime.Now; //You can also use DateTime.MinValue. You cannot assign null here, WHY? 
DateTime.TryParse(ctrlDate.Text, out d);

对于可空的DateTime

代码语言:javascript
复制
DateTime? nd = null;
DateTime.TryParse(ctrlDate.Text, out nd); //this doesn't work. it expects DateTime not DateTime?

For DateTime? System.DateTime.TryParse(string,out System.DateTime)的最佳重载方法匹配有一些无效的参数

所以我不得不把它改成

代码语言:javascript
复制
DateTime? nd = null;
DateTime d = DateTime.Now;
if(DateTime.TryParse(ctrlDate.Text, out d))
   nd = d;

为了实现可空日期,我必须创建一个额外的DateTime变量。

有更好的办法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-20 07:35:19

您确实需要创建额外的DateTime变量,没有更好的方法了。

尽管您当然可以将其封装在自己的解析方法中:

代码语言:javascript
复制
bool MyDateTimeTryParse(string text, out DateTime? result)
{
    result = null;

    // We allow an empty string for null (could also use IsNullOrWhitespace)
    if (String.IsNullOrEmpty(text)) return true;

    DateTime d;
    if (!DateTime.TryParse(text, out d)) return false;
    result = d;
    return true;
}
票数 2
EN

Stack Overflow用户

发布于 2012-09-20 07:19:56

不需要将任何内容赋值给作为out参数传递给方法的变量,只需:

代码语言:javascript
复制
DateTime d;
if (DateTime.TryParse(ctrlDate.Text, out d))
{
    // the date was successfully parsed => use it here
}
else
{
    // tell the user to enter a valid date
}

关于为什么不能编写DateTime d = null;的第一个问题,这是因为DateTime是一个值类型,而不是一个引用类型。

票数 4
EN

Stack Overflow用户

发布于 2012-09-20 07:19:28

DateTime d=新的DateTime.Now;//您不能在这里赋值为null,为什么?

因为它是一个值类型,它是一个结构,所以不能将null赋值给结构/值类型。

对于DateTime.TryParse

如果您想使用DateTime.TryParse,那么您必须创建一个类型为DateTime的额外变量,然后如果您愿意的话,将它的值分配给可空的DateTime。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12507716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档