teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/01/12 23:40

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  どういうことかと言うと、`BindingSource.DataSource` に `IEnumerable<T>` を入れても、それが自動的に `List<T>` になることはありません。
21
21
 
22
- [CsvHelper のドキュメント](http://joshclose.github.io/CsvHelper/2.x/) によると、GetRecords<T>() の戻り値は `IEnumerable<T>` となっています。
22
+ [CsvHelper のドキュメント](http://joshclose.github.io/CsvHelper/2.x/) によると、`GetRecords<T>()` の戻り値は `IEnumerable<T>` となっています。
23
23
  ですので、`DataSource` の中身は `List<T>` ではありません。
24
24
 
25
25
  なぜ写経元のコードで動いているのかわかりませんが、もともと間違ったものを写経していた可能性もあります。
@@ -40,4 +40,8 @@
40
40
 
41
41
  また今回は動きませんでしたが、仮に `List<T>` に変換成功して動いたとします。
42
42
  しかしそれはたまたま内部で `List<T>` に変換された結果で、フレームワークのバージョンアップとともにいつ動かなくなるかわからないものですから、そんなコードを書いてはいけません。
43
- `DataSource` に入れたものと同じクラス・インターフェースでアクセスしましょう。
43
+ `DataSource` に入れたものと同じクラス・インターフェースでアクセスしましょう。
44
+
45
+ 追記
46
+
47
+ もしかしたら `DataSource = ...GetRecords().ToList()` とすべきところを `DataSource = GetRecords()` としているのかも知れません。`ToList()` をつければ `IEnumerable` にしなくても動くと思います。