TryParse在一行:接受挑战?

时间:2013-10-31 09:50:59

标签: c# .net datetime

我猜是一个挑战,但我希望在一行中使用TryParse :)我的代码:

DateTime tempDate;
user.DataNascita = DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;

user.DataNascitaDateTime?,如果TryParse正确,我想返回数据,否则返回null。但我需要一个(所以,新线)。我不能把所有人都排成一行吗?

好奇......

4 个答案:

答案 0 :(得分:15)

我通常在LINQ查询中使用此扩展方法:

public static DateTime? TryGetDate(this string dateString, string format = null)
{
    DateTime dt;
    bool success = format == null ? DateTime.TryParse(dateString, out dt) : DateTime.TryParseExact(dateString, format, null, DateTimeStyles.None, out dt);
    return success ? dt : (DateTime?)null;
}

你以这种方式使用它:

user.DataNascita = txtDataDiNascita.Text.TryGetDate();

这是另一种具有多种格式和IFormatProvider(不同文化)的重载:

public static DateTime? TryGetDate(this string dateString, IFormatProvider provider, params string[] formats)
{
    DateTime dt;
    var success = DateTime.TryParseExact(dateString, formats, provider, DateTimeStyles.None, out dt);
    return success ? dt : (DateTime?)null;
}

答案 1 :(得分:9)

基本上你需要一个辅助方法。例如:

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

然后你可以使用:

user.DataNascita = ParseHelpers.TryParseDateTime(txtDataDiNascita.Text);

您可能也希望重载与DateTime.TryParseDateTime.TryParseExact的重载相对应。根据蒂姆的回答,我个人不会将其作为一种扩展方法,但这是个人偏好的问题。

答案 2 :(得分:4)

是的,我很容易找到这么多的挑战

DateTime temp; if (DateTime.TryParse(txtDataDiNascita.Text, out temp)) user.DataNascita = temp;

答案 3 :(得分:2)

DateTime tempDate; user.DataNascita= DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;

你可以像上面那样在一行中完成。但是创建辅助方法是一种很好的方法。