如何将 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,它是 Cops
和 Robbers
的基础 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>();
}
如何根据下面的代码 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,它是 Cops
和 Robbers
的基础 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>();
}