2015-06-22 65 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並指定您的日期格式...