C# DateTime.TryParse实现问题

C# DateTime.TryParse实现问题,c#,.net,C#,.net,我有一段代码,需要确定收到的值是否为DateTime,如果是,则返回0,否则返回值以计算总和: row["Total"] = months.Sum(kv => { DateTime dateValue; if (!DateTime.TryParse(kv.Value, out dateValue))

我有一段代码,需要确定收到的值是否为DateTime,如果是,则返回0,否则返回值以计算总和:

row["Total"] = months.Sum(kv =>
                            {
                                DateTime dateValue;
                                if (!DateTime.TryParse(kv.Value, out dateValue))
                                {
                                    return double.Parse(kv.Value);
                                }
                                else
                                {
                                    return 0;
                                }
                            });
但这些值也被视为日期时间

1726.07

4756.06

1.08

1.27

1.11
那么,每个双精度值都将被视为DateTime吗?

您可以试试这个

DateTime dateValue;
months.Where(kv=>(!DateTime.TryParse(kv.Value, out dateValue))).Sum(kv =>double.Parse(kv.Value));//Sum of values where values are not datetime

如果你“一路走”怎么办

row["Total"] = months.Sum(kv =>
                            {
                                double toReturn = 0;
                                if (!Double.TryParse(kv.Value, out toReturn )) return 0;

                                return toReturn;            
                            });
有时可以使用DateTime解析双精度值。解析,但我不相信您可以将“22/06/2015”这样的日期解析为双精度。你并不真的需要这个“其他”的说法


另一个选项是使用DateTime.TryParseExact并指定日期的格式…

什么是
months
?它首先是如何设置这些值的?这似乎是真正的问题。请尝试指定匹配所需的格式。为什么不先尝试
double.TryParse
呢无论如何,猜测数据类型总是很棘手的。首先要避免这种情况。如果您知道可以使用
DateTime.TryParseExact
@Ali的格式,我的观点是
months
似乎与它所保存的数据不一致。如果可能的话,我会在问题进一步升级之前解决它。请不要只是随便猜测。您的代码将具有与OP相同的效果。现在根据@ali comment…他可以试试这个