我猜是一个挑战,但我希望在一行中使用TryParse :)我的代码:
DateTime tempDate;
user.DataNascita = DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;
user.DataNascita
是DateTime?
,如果TryParse正确,我想返回数据,否则返回null。但我需要一个(所以,新线)。我不能把所有人都排成一行吗?
好奇......
答案 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.TryParse
和DateTime.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;
你可以像上面那样在一行中完成。但是创建辅助方法是一种很好的方法。