C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■86554 / 1階層)  CSVHelperでマッピングがうまくいかない
□投稿者/ Hongliang (614回)-(2018/02/14(Wed) 09:25:56)
マッピングの問題ではないですね。

> using (var csv = new CsvHelper.CsvReader(new StreamReader(filename)))
> {
> csv.Configuration.HasHeaderRecord = false; // Headerはなし
> if(data.GetType() == typeof(DataClass))
> {
> csv.Configuration.RegisterClassMap<MyClassMap>();
> }
> return csv.GetRecords<IData>();
> }

csv.GetRecords<T>は一見すべてのデータをそろえて返してきていますが、
実際にはforeachで次が要求されるたびにStreamReaderからデータを読み込みます。
で、usingがforeachの列挙よりも早くスコープが終了するため
CsvReaderがクローズしてしまい、foreachのタイミングで読み込めなくなっています。

usingを使うのであれば、直接GetRecords<T>()の結果を返すのではなく、
yieldを使って
foreach (IData d in csv.GetRecords<IData>())
{
yield return d;
}
などとすれば、GetRecords<T>のすべての列挙が完了してから
usingのスコープが終了するためうまいこと動くようになります。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←CSVHelperでマッピングがうまくいかない /MGS →Re[2]: CSVHelperでマッピングがうまくいかない /にゃるら
→Re[2]: CSVHelperでマッピングがうまくいかない /MGS
 
上記関連ツリー

CSVHelperでマッピングがうまくいかない / MGS (18/02/14(Wed) 01:45) #86553
CSVHelperでマッピングがうまくいかない / Hongliang (18/02/14(Wed) 09:25) #86554 ←Now
│├ Re[2]: CSVHelperでマッピングがうまくいかない / にゃるら (18/02/14(Wed) 10:38) #86555
││└ Re[3]: CSVHelperでマッピングがうまくいかない / MGS (18/02/14(Wed) 22:00) #86560 解決済み
│└ Re[2]: CSVHelperでマッピングがうまくいかない / MGS (18/02/14(Wed) 21:42) #86559 解決済み
Re[1]: CSVHelperでマッピングがうまくいかない / 魔界の仮面弁士 (18/02/14(Wed) 11:11) #86556
  └ Re[2]: CSVHelperでマッピングがうまくいかない / MGS (18/02/14(Wed) 21:39) #86558 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信