80

我正在尝试将IList类型转换为List类型,但每次都会出错。

List<SubProduct> subProducts= Model.subproduct;

Model.subproduct返回IList<SubProduct>

4

9 回答 9

146

尝试

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

或者

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
于 2010-02-05T13:08:47.447 回答
34

这个怎么样:

List<SubProduct> subProducts = Model.subproduct.ToList();
于 2010-02-05T13:09:08.877 回答
14

就我而言,我必须这样做,因为没有任何建议的解决方案可用:

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
于 2013-12-17T16:52:34.943 回答
4
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;

隐式转换失败是因为List<>implements IList,反之亦然。所以你可以说IList<T> foo = new List<T>(),但不是List<T> foo = (some IList-returning method or property)

于 2010-02-05T13:08:34.343 回答
0
List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

这会将 IList 对象转换为列表对象。

于 2016-06-09T07:26:52.523 回答
0

其他答案都建议将 AddRange 与 IList 一起使用。

避免强制转换的更优雅的解决方案是实现 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);
    }
}
于 2019-04-08T21:47:24.200 回答
0

如果你有一个包含接口的 IList,你可以像这样转换它:

列出到 IList

List<Foo> Foos = new List<Foo>(); 
IList<IFoo> IFoos = Foos.ToList<IFoo>();

IList 到列表

IList<IFoo> IFoos = new List<IFoo>();
List<Foo> Foos = new List<Foo>(IFoos.Select(x => (Foo)x));

这假设Foo已经IFoo接口。

于 2019-10-13T15:19:22.550 回答
0
    public async Task<List<TimeAndAttendanceShift>> FindEntitiesByExpression(Expression<Func<TimeAndAttendanceShift, bool>> predicate)
    {
        IList<TimeAndAttendanceShift> result = await _dbContext.Set<TimeAndAttendanceShift>().Where(predicate).ToListAsync<TimeAndAttendanceShift>();

        return result.ToList<TimeAndAttendanceShift>();
    }
于 2019-12-29T21:33:16.040 回答
-3

这是将通用对象列表转换/转换为字符串列表的最佳选择。

object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();
于 2017-10-27T12:01:53.653 回答