我想这只是一个挑战,但我希望在一行中使用TryParse :)我的代码:
DateTime tempDate;
user.DataNascita = DateTime.TryParse(txtDataDiNascita.Text, out tempDate) ? tempDate : (DateTime?)null;
Run Code Online (Sandbox Code Playgroud)
user.DataNascita是DateTime?的,我想返回数据,如果的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)
基本上你需要一个辅助方法.例如:
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.TryParse和DateTime.TryParseExact,太.根据Tim的回答,我个人不会将其作为一种扩展方法,但这是个人偏好的问题.
| 归档时间: |
|
| 查看次数: |
3267 次 |
| 最近记录: |