C# 一行中的TryParse:接受挑战?
我想这只是一个挑战,但我希望在一行中使用TryParse:)我的代码:C# 一行中的TryParse:接受挑战?,c#,.net,datetime,C#,.net,Datetime,我想这只是一个挑战,但我希望在一行中使用TryParse:)我的代码: user.DataNascita是DateTime?,如果TryParse正确,我想返回数据,否则返回null。但我需要一个新的(所以,新的线)。我不能把所有的都放在一行吗 只是好奇…基本上,你需要一个助手方法。例如: public static DateTime? TryParseDateTime(string text) { DateTime validDate; return DateTime.TryP
user.DataNascita
是DateTime?
,如果TryParse正确,我想返回数据,否则返回null。但我需要一个新的(所以,新的线)。我不能把所有的都放在一行吗
只是好奇…基本上,你需要一个助手方法。例如:
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
的重载对应的重载。根据Tim的回答,我个人不会将此作为扩展方法,但这是个人偏好的问题。我通常在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
(不同文化)的重载:
是的,很容易,我没发现这么大的挑战
DateTime temp; if (DateTime.TryParse(txtDataDiNascita.Text, out temp)) user.DataNascita = temp;
你可以像上面那样在一行中完成。但是创建助手方法是一个很好的方法。当然:将这两行放在一个单独的方法中。+1为简单起见。但Tim答案更准确。不必要accurate@joshua:不确定“更准确”是什么意思。我的答案中有什么不准确?@JonSkeet Tim的答案更一般。它还处理格式。你的回答没有错误。我是谁说618k代表的回答错了。处理格式和内容问题+1,谁错了。从来没有。:)看起来不错,但是使用
txtDataDiNascita.Text.TryGetDate()
.NET表示字符串不包含TryGetDate的定义?(我把这个方法放在另一个类中,一种CommonUtils类)@markzzz:它是一个扩展方法,这意味着你必须把它放在一个静态类中,比如公共静态类StringExtensions
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;
}
DateTime temp; if (DateTime.TryParse(txtDataDiNascita.Text, out temp)) user.DataNascita = temp;
DateTime tempDate; user.DataNascita= DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;