匿名型のリストを動的オブジェクトのリストにキャストする 質問する

匿名型のリストを動的オブジェクトのリストにキャストする 質問する

List<AnonymousObject>なぜ aを a にキャストできないのでしょうかList<dynamic>? 次のコードがあります:

var datasource = someList.Select(o => new { x = o.A, y = o.B });
dgvSomeGridView.DataSource = datasource.ToList();
dgvSomeGridView.DataBind();

GridView.DataSource次に、次のコードでアクセスします。

var ds = ((List<dynamic>)dgvSomeGridView.DataSource);
....

しかし、それを にキャストした行でエラーが発生しますList<dynamic>。次のように表示されます。

System.Collections.Generic.List'1[<>f__AnonymousType0'8[System.Int32,System.String]]型のオブジェクトを型にキャストできませんSystem.Collections.Generic.List'1[System.Object]

匿名型のリストを にキャストできないのはなぜですかdynamic、またはエラーが示すようにobject型にキャストできないのはなぜですか? どうすればこれを解決できますか?

私のコードは C#、フレームワーク 4.0、VS2010 Pro でビルドされ、プラットフォームは ASP.NET です。

助けてください、よろしくお願いします。

ベストアンサー1

List<T>共変ではなく不変なので、キャストIEnumerable<dynamic>共変をサポートする:

var ds = ((IEnumerable<dynamic>)dgvSomeGridView.DataSource).ToList();

多くのための共変に関する情報

おすすめ記事