将IList转换为List

时间:2010-02-05 13:06:29

标签: c# list casting ilist

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

List<SubProduct> subProducts= Model.subproduct;

Model.subproduct返回IList<SubProduct>

9 个答案:

答案 0 :(得分:112)

尝试

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

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

答案 1 :(得分:32)

这个怎么样:

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

答案 2 :(得分:7)

在我的情况下,我必须这样做,因为没有一个建议的解决方案可用:

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

答案 3 :(得分:3)

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

隐式转换失败,因为List<>实现了IList,反之亦然。因此,您可以说IList<T> foo = new List<T>(),但不能List<T> foo = (some IList-returning method or property)

答案 4 :(得分:0)

List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

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

答案 5 :(得分: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);
    }
}

答案 6 :(得分: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

答案 7 :(得分: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>();
    }

答案 8 :(得分:-3)

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

object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();