web-dev-qa-db-ja.com

IListをリストにキャスト

IList型をList型にキャストしようとしていますが、毎回エラーが発生します。

List<SubProduct> subProducts= Model.subproduct;

Model.subproductIList<SubProduct>を返します。

59
Pankaj

試してみる

List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);

または

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
113
Pbirkoff

これはどう:

List<SubProduct> subProducts = Model.subproduct.ToList();
32
Mark Seemann

私の場合、提案された解決策のどれも利用可能でなかったので、私はこれをしなければなりませんでした:

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
9
bluish
_List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;
_

_List<>_は、その逆ではなくIListを実装するため、暗黙的な変換は失敗します。したがって、IList<T> foo = new List<T>()と言うことはできますが、List<T> foo = (some IList-returning method or property)とはできません。

3
Webleeuw

他の回答はすべて、IListでAddRangeを使用することを推奨しています。

キャストを回避するよりエレガントなソリューションは、IListの拡張機能を実装してジョブを実行することです。

VB.NETの場合:

<Extension()>
Public Sub AddRange(Of T)(ByRef Exttype As IList(Of T), ElementsToAdd As IEnumerable(Of T))
   For Each ele In ElementsToAdd
      Exttype.Add(ele)
   Next
End Sub

C#の場合:

public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
    foreach (var ele in ElementsToAdd)
    {
        Exttype.Add(ele);
    }
}
0
user11331434

以下を使用してリストを反復処理できます。

var item = Model.subproduct[index];
0
Versatile
List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

これにより、IListオブジェクトがリストオブジェクトに変換されます。

0
Hudhaifa Yoosuf