如何将List <object>转换为IEnumerable <t>

时间:2016-01-12 19:47:53

标签: c# .net generics ienumerable

如果给出以下代码,如何将expected作为IEnumerable<T>返回?

public List<object> expected = new List<object>();

public IEnumerable<T> SqlQuery<T>(string sql)
{
    // Return expected as IEnumerable<T>
}

(这是为单元测试创​​建的类,用于模拟实体框架SqlQuery<T>方法。我们可以提前设置我们的预期结果,并让它返回您期望的结果。)

3 个答案:

答案 0 :(得分:9)

假设expected确实包含T类型的实例,您可以使用LINQ (example)运算符:

public IEnumerable<T> SqlQuery<T>(string sql)
{
    return expected.Cast<T>();
}

如果任何元素的强制转换失败,将抛出InvalidCastException。

答案 1 :(得分:1)

如果您的列表包含许多子类型,并且您只想返回特定的子类型,您还可以执行以下操作:

public IEnumerable<T> SqlQuery<T>(string sql)
{
    return expected.OfType<T>();
}

在这种情况下,假设您有一个Person类,它是CopsRobbers的基类。

如果你喜欢收藏中的所有“人物”,你可以写下:OfType<Person>

但如果您只想要收藏中的劫匪,请使用OfType<Robbers>

如果您要求expected集合中不存在的类型OfType<Footballer>,则会返回空集合。

答案 2 :(得分:-1)

最好使用LINQ Cast运算符转换为所需的IEnumerable。

-(CGFloat) tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section
{
    return UITableViewAutomaticDimension;
}