设定

public interface ITable { }

public class Company : ITable {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class PaginationGridModel {

    public PaginationGridModel(IList<ITable> rows) {
        //cool stuff goes here
    }
}

public GridModel GenerateModel<T>(IQueryable<T> Table) where T : ITable {
    return new GridModel((IList<ITable>)Table);
}

//Actual Call
return GenerateModel<Company>(this.dataContext.Companies);


产生异常

Unable to cast object of type 'System.Collections.Generic.List`1[Company]' to type 'System.Collections.Generic.IList`1[ITable]'.




由于Company实现了ITable,因此我应该能够将我的List<Company>转换为IList<ITable>,但是它并不起作用,因为它实际上是T。但是T在函数定义中限制为ITable。我在这里做错了什么?当我不使用泛型时,设置工作正常。但是我想要通用的设置,因为我一直在重复编写相同的代码-这很糟糕:)

任何帮助将不胜感激。即使您告诉我的是无法完成。

最佳答案

对于.NET 3.5,您可以使用以下命令:

return new GridModel(table.ToList().ConvertAll(x => (ITable)x));

10-08 04:19