【发布时间】:2014-10-01 10:07:45
【问题描述】:
我阅读了很多关于 SO 的帖子,但仍然需要一些帮助来理解这一点。
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;
}
}
谢谢
【问题讨论】:
-
您是否缺少
{...}和using (var reader...? -
这可能是由于 CsvReader 处理了 reader,所以你不需要 2 个 using 语句。这假设您的实际代码编译不同于您发布的代码。
-
@DavidG 不,先生,如果你想嵌套它们,可以使用这样的语句堆叠。好消息是,如果出现问题,他们都会按照它们发生的顺序进行处理
-
@JBenjamin 是的,你可以做到,但一般建议不要这样做。
标签: c# garbage-collection dispose idisposable csvhelper