IList
型をList
型にキャストしようとしていますが、毎回エラーが発生します。
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
はIList<SubProduct>
を返します。
試してみる
List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);
または
List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
これはどう:
List<SubProduct> subProducts = Model.subproduct.ToList();
私の場合、提案された解決策のどれも利用可能でなかったので、私はこれをしなければなりませんでした:
List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
_List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;
_
_List<>
_は、その逆ではなくIList
を実装するため、暗黙的な変換は失敗します。したがって、IList<T> foo = new List<T>()
と言うことはできますが、List<T> foo = (some IList-returning method or property)
とはできません。
他の回答はすべて、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);
}
}
以下を使用してリストを反復処理できます。
var item = Model.subproduct[index];
List<ProjectResources> list = new List<ProjectResources>();
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();
これにより、IListオブジェクトがリストオブジェクトに変換されます。