当前位置:  开发笔记 > 编程语言 > 正文

如何将DateTime.TryParse与Nullable <DateTime>一起使用?

如何解决《如何将DateTime.TryParse与Nullable<DateTime>一起使用?》经验,为你挑选了4个好方法。

我想使用DateTime.TryParse方法将字符串的datetime值变为Nullable.但是,当我尝试这个:

DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);

编译告诉我

'out'参数未被归类为变量

不知道我需要做什么.我也尝试过:

out (DateTime)d.Value 

这也不起作用.有任何想法吗?



1> Jon Skeet..:

正如Jason所说,你可以创建一个正确类型的变量并传递它.您可能希望将其封装在您自己的方法中:

public static DateTime? TryParse(string text)
{
    DateTime date;
    if (DateTime.TryParse(text, out date))
    {
        return date;
    }
    else
    {
        return null;
    }
}

...或者如果您喜欢条件运算符:

public static DateTime? TryParse(string text)
{
    DateTime date;
    return DateTime.TryParse(text, out date) ? date : (DateTime?) null;
}

或者在C#7中:

public static DateTime? TryParse(string text) =>
    DateTime.TryParse(text, out var date) ? date : (DateTime?) null;


我可能不应该和The Skeet争论,但是......你应该调用你的方法Parse,因为我希望一个名为TryParse的方法遵循TryParse约定并返回一个布尔值.;-)

2> Jason Kealey..:
DateTime? d=null;
DateTime d2;
bool success = DateTime.TryParse("some date text", out d2);
if (success) d=d2;

(可能有更优雅的解决方案,但你为什么不简单地做上面的事情?)


为什么要将DateTime转换为DateTime?在将其传递给TryParse之前,您不需要重新调用d2.
你是对的,我正在寻找更多的单线来完成它,但我想这样做.不喜欢创建那个临时变量,感觉很乱.: - /似乎应该更好地支持这种情况.

3> 小智..:

这是Jason建议的一个稍微简洁的版本:

DateTime? d; DateTime dt;
d = DateTime.TryParse(DateTime.Now.ToString(), out dt)? dt : (DateTime?)null;



4> Binary Worri..:

你不能因为Nullable是不同的类型DateTime.你需要编写自己的函数来做到这一点,

public bool TryParse(string text, out Nullable nDate)
{
    DateTime date;
    bool isParsed = DateTime.TryParse(text, out date);
    if (isParsed)
        nDate = new Nullable(date);
    else
        nDate = new Nullable();
    return isParsed;
}

希望这可以帮助 :)

编辑: 删除(显然)不正确测试的扩展方法,因为(由一些不好的囤积指出)尝试更改"this"参数的扩展方法将无法使用值类型.

PS Bad Hoor有问题是老朋友:)

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有