2016-10-01 64 views
1

我正在閱讀包含日期提交的CSV文件 如何在嘗試轉換爲DateTime時忽略異常?嘗試捕捉對象初始化

 var csvlines = File.ReadAllLines(FilePath);  
     // skip the first line! 
     var csvLinesData = csvlines.Skip(1).Select(l => l.Split(Consts.Delimiter)); 

     return csvLinesData.Select(data => new ReleaseNote 
     { 
      Version = data[0], 
      ReleaseDate = Convert.ToDateTime(data[1]) // Possible exception 

     }).ToList(); 
+2

用一個使用DateTime.TryParse函數替換'Convert.ToDateTime'並返回日期或任何你的「沒有解析」值應該是。 –

+2

作爲您的標題建議,爲什麼不試一試? – chessofnerd

+0

使用try catch可以跳過所有記錄,而不僅僅是一個 – Maro

回答

4
return csvLinesData.Select(data => { 
    DateTime d; 
    return new ReleaseNote 
    { 
    Version = data[0], 
    ReleaseDate = DateTime.TryParse(data[1], out d) ? d : DateTime.MinValue 
    } 
}).ToList(); 

你也可以把null而不是DateTime.MinValue如果您RELEASEDATE屬性爲空。

1

你應該使用DateTime.TryParse:

https://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx

foreach (string dateString in dateStrings) 
    { 
    if (DateTime.TryParse(dateString, out dateValue)) 
     Console.WriteLine(" Converted '{0}' to {1} ({2}).", dateString, 
          dateValue, dateValue.Kind); 
    else 
     Console.WriteLine(" Unable to parse '{0}'.", dateString); 
    } 
+0

這是helfull信息。將爲@Volkan Ceylan提供的OP場景提供一個相關示例 –