Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一行中的TryParse:接受挑战?_C#_.net_Datetime - Fatal编程技术网

C# 一行中的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

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

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;