2015-06-22 98 views
0

我有这样的代码,我需要如果是这样,以确定是否接收到的值的日期时间,返回0,以计算总和,否则返回值:DateTime.TryParse实现问题

row["Total"] = months.Sum(kv => 
          { 
           DateTime dateValue; 
           if (!DateTime.TryParse(kv.Value, out dateValue)) 
           { 
            return double.Parse(kv.Value); 
           } 
           else 
           { 
            return 0; 
           } 
          }); 

但这些值被视为DateTime?

1726.07 

4756.06 

1.08 

1.27 

1.11 

将每个double值都视为DateTime吗?

+2

'months'是什么?它是如何获得这些值的第一位?这似乎是真正的问题.. – Sayse

+0

尝试指定需要匹配的格式 –

+2

为什么不先尝试'double.TryParse'? :D无论如何,猜测数据类型总是很棘手。你首先要避免这种情况。 – Luaan

回答

-1

你可以试试这个..

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 
+0

请不要只是随机猜测。你的代码与OP的效果相同。 – hvd

+0

现在按照@ali的评论 ...他可以试试这个 –

1

如果你这样做“所有的办法”:

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

           return toReturn;    
          }); 

有时双值可以使用DateTime.Parse解析,但我不相信你可以像“2015年6月22日”那样解析日期来翻倍。你并不需要这个'其他'的声明。

其他选项将使用DateTime.TryParseExact并指定您的日期格式...