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

How to convert List<object> to IEnumerable<T>

如何根据下面的代码 return expected 作为 IEnumerable<T>

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

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

(这是一个class,是为单元测试创​​建的,用来模拟Entity Framework SqlQuery<T>方法。我们可以提前设置我们的预期结果,然后简单地得到它return如你所愿。)

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

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

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

如果你有一个包含许多子类型的列表,而你只想 return 一个特定的子类型,你也可以这样做:

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

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

如果您想要 collection 中的所有 "people",您可以写:OfType<Person>

但如果你只想要 collection 的强盗,请使用 OfType<Robbers>

如果您要求 expected collection 中不存在的类型,例如 OfType<Footballer>,将 return 编辑一个空的 collection .

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

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