10

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

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

user.DataNascitaDateTime?,如果 TryParse 正确,我想返回数据,否则返回 null。但我需要出一个(所以,新行)。我不能把所有东西都放在一条线上吗?

只是好奇...

4

4 回答 4

16

我通常在 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;
}
于 2013-10-31T09:56:26.740 回答
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.TryParseand的重载相对应的重载DateTime.TryParseExact。根据蒂姆的回答,我个人不会将此作为扩展方法,但这是个人喜好问题。

于 2013-10-31T09:54:36.113 回答
4

是的,这很容易我没有发现这么大的挑战

DateTime temp; if (DateTime.TryParse(txtDataDiNascita.Text, out temp)) user.DataNascita = temp;
于 2013-10-31T09:57:21.840 回答
2
DateTime tempDate; user.DataNascita= DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;

您可以如上所述在一行中完成。但是创建你的辅助方法是个好方法。

于 2013-10-31T09:58:19.000 回答