###### tags: `學習記錄` `C#`
# DataGridView.DataSource 結構
在使用 C# WinForm 的 DataGridView 時發現沒辦法直接把 HashSet 直接餵給它 :shark:
```csharp=
DataGridView.DataSource = new HashSet<T>();
// 編譯失敗
```
需要多加上 ToArray() 或是 ToList() 才能夠成功
```csharp=
DataGridView.DataSource = new HashSet<T>().ToArray();
// 編譯成功
```
原因在於 DataGridView 類別可吃的資料結構
[DataGridView.DataSource 官方文件](https://docs.microsoft.com/zh-tw/dotnet/api/system.windows.forms.datagridview.datasource?view=netframework-4.8)
DataGridView 類別支援標準 Windows Forms 資料系結模型。 這表示資料來源可以是任何實作為下列其中一個介面的類型:
* <font color="#03b270">IList</font> 介面,包括一維陣列。
* <font color="#03b270">IListSource</font> 介面,例如 DataTable 和 DataSet 類別。
* <font color="#03b270">IBindingList</font> 介面,例如 BindingList<T> 類別。
* <font color="#03b270">IBindingListView</font> 介面,例如 BindingSource 類別。
IList 實作:
ICollection IEnumerable
HashSet<T> 實作:
ICollection<T> IEnumerable<T> IEnumerable
:::warning
故 HashSet<T>,不可直接匯入 DataGridView.DataSource
:::