TryParse在一行:接受挑战?

mar*_*zzz 9 .net c# datetime

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

DateTime tempDate;
user.DataNascita = DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;
Run Code Online (Sandbox Code Playgroud)

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

只是好奇...

Tim*_*ter 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;
}
Run Code Online (Sandbox Code Playgroud)

你以这种方式使用它:

user.DataNascita = txtDataDiNascita.Text.TryGetDate();
Run Code Online (Sandbox Code Playgroud)

这是另一种具有多种格式和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;
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 9

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

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

然后你可以使用:

user.DataNascita = ParseHelpers.TryParseDateTime(txtDataDiNascita.Text);
Run Code Online (Sandbox Code Playgroud)

你可能会想用的重载相应的过载DateTime.TryParseDateTime.TryParseExact,太.根据Tim的回答,我个人不会将其作为一种扩展方法,但这是个人偏好的问题.

  • 为简单起见+1.但蒂姆的答案更准确. (2认同)
  • @JonSkeet Tim回答更通用.它还处理格式.你的答案没有不准确之处.我是谁说618k代表的答案错了. (2认同)