2012-11-22 82 views
1

所有,我有DataGridView(DGV)中的行。爲了測試是否被添加到這個DGV該項目是已經存在我寫它採用以下LINQ查詢返回匹配行(而不是for/foeach環路)的行索引的方法:LINQ行索引檢索鑄造要求

IEnumerable<int> rowCol = this.dataGridViewAttachList.Rows.Cast<DataGridViewRow>() 
    .Where(row => row.Cells[(int)DgvColumns.DatabaseName].Value.ToString() 
     .Equals(databaseName, StringComparison.OrdinalIgnoreCase)) 
    .Select(row => row.Index); 

我的問題是:爲什麼我必須使用Cast<DataGridViewRow>()進行施放?我第一次嘗試沒有它,它花了我一段時間來解決這個問題。但是我不清楚爲什麼這是必要的?

謝謝你的時間。

回答

5

這是因爲DataGridViewRowCollection執行IEnumerable而不是IEnumerable<DataGridViewRow>

1

DataGridView。行的類型爲DataGridViewRowCollection,它實現IEnumerable。 LINQ擴展方法需要IEnumerable<T>

1

這是因爲DataGridViewRowCollection(Rows屬性的類型)是非通用的IEnumerable。所以要獲得可由linq使用的通用版本IEnumerable<DataGridViewRow>,您應該調用。 Cast<DataGridViewRow>()