1

すべて、DataGridView(DGV)に行があります。このDGVに追加されているアイテムがすでに存在するかどうかをテストするために、次のLINQクエリを使用して(for/foeachループではなく)一致する行の行インデックスを返すメソッドを作成しました。

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>()ですか?私は最初にそれなしで試しましたが、これを解決するのにしばらく時間がかかりました。しかし、なぜそれが必要なのか私にはわかりませんか?

御時間ありがとうございます。

4

3 に答える 3

5

これは、をDataGridViewRowCollection実装するためIEnumerableであり、ではありませんIEnumerable<DataGridViewRow>

于 2012-11-22T21:39:38.920 に答える
1

DataGridView.RowsはタイプDataGridViewRowCollectionで、を実装しIEnumerableます。LINQ拡張メソッドにはが必要ですIEnumerable<T>

于 2012-11-22T21:39:59.897 に答える
1

これは、DataGridViewRowCollection(Rowsプロパティのタイプ)が非ジェネリックであるためIEnumerableです。IEnumerable<DataGridViewRow>したがって、linqで使用できる汎用バージョンを取得するには、を呼び出す必要があります。Cast<DataGridViewRow>()

于 2012-11-22T21:43:24.643 に答える