2014-10-01 62 views
1

對於這個我在SO上閱讀了不少帖子,還需要一些幫助理解這個。從csv導入方法'不要多次配置對象'警告

CodeAnalysis是說這種方法處理對象兩次。實際上,這個方法中的兩個對象正在警告我。曾經爲file.InputStream,一次用於reader對象

這裏是我的代碼:

public void SaveCsvData(HttpPostedFileBase file, int vendorId) 
     { 
      var listCsvImport = new List<CsvImport>(); 

      try 
      { 
       using (var reader = new StreamReader(file.InputStream)) 
       using (var csvReader = new CsvHelper.CsvReader(reader)) 
       { 

        int count = 0; 
        while (csvReader.Read()) 
        { 
         ...<snip>... 

         listCsvImport.Add(record); 
        } 
        _db.CsvImports.AddRange(listCsvImport); 
        _db.SaveChanges(); 
       } 
...<snip>... 

      } 
      catch (CsvBadDataException ex) 
      { 
       log.Error("Invalid data in the CSV file, terminating process..."); 
       throw; 
      } 
      catch (Exception ex) 
      { 
       log.Error("Csv import failed, no data was saved.", ex); 
       throw; 
      } 

     } 

感謝

+0

您是否缺少'{...}'使用(var reader ...'? – DavidG 2014-10-01 10:11:36

+2

這可能是由於CsvReader配置了閱讀器,因此您不需要使用2個語句。假設你的實際代碼編譯不像你發佈的代碼 – 2014-10-01 10:14:25

+0

@DavidG no sir,如果你想嵌套它們,使用類似的語句堆棧就可以了。好的是,如果出現錯誤,它們將按順序處理他們被立即使用 – 2014-10-02 06:53:37

回答

2

using (var csvReader = new CsvHelper.CsvReader(reader))已經部署的讀者對象,所以你不需要使用using (var reader = new StreamReader(file.InputStream))

+0

是什麼讓你認爲第一行配置'reader'? – DavidG 2014-10-01 10:16:35

+2

@DavidG'不要多次處理對象'警告,也許? – 2014-10-01 10:18:38

+1

老問題/答案,我知道,但是下面的GitHub問題確認了CsvReader配置傳入的行爲StreamReader https://github.com/JoshClose/CsvHelper/issues/396(個人而言,我會處理StreamReader而不是CsvReader,除非同時實例化。) – Quails4Eva 2016-02-08 16:41:14