如果给出以下代码,如何将expected
作为IEnumerable<T>
返回?
public List<object> expected = new List<object>();
public IEnumerable<T> SqlQuery<T>(string sql)
{
// Return expected as IEnumerable<T>
}
(这是为单元测试创建的类,用于模拟实体框架SqlQuery<T>
方法。我们可以提前设置我们的预期结果,并让它返回您期望的结果。)
答案 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
类,它是Cops
和Robbers
的基类。
如果你喜欢收藏中的所有“人物”,你可以写下:OfType<Person>
但如果您只想要收藏中的劫匪,请使用OfType<Robbers>
如果您要求expected
集合中不存在的类型OfType<Footballer>
,则会返回空集合。
答案 2 :(得分:-1)
最好使用LINQ Cast运算符转换为所需的IEnumerable。
-(CGFloat) tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section
{
return UITableViewAutomaticDimension;
}