C#如何使用.ToList()将IEnumerable转换为IList?

4
我正在使用一个外部库,它返回一个 IEnumerable。在我收到它们之后,我想在末尾添加一些模型。这只有在使用 IList 或其他某些集合时才可能。因此,当我尝试使用 .ToList() 方法将 IEnumerable 转换为列表时,它返回一个 IEnumerable。这不是我预期的结果。我是否正确地使用了 .ToList()?还是有什么别的方法可以解决我的问题?
这是我目前的代码:
IList<Models.Browser.Language> languages = GetLanguages(dateDrom, dateTo).ToList();
IList<Models.Browser.Language> primaryItems = languages.Take(10);

这最后一行产生了一个错误,说: 无法隐式转换类型“System.Collections.Generic.IEnumerable<Bogus.Models.Browser.Language>”为类型“System.Collections.Generic.IList<Bogus.Models.Browser.Language>”。存在显式转换(是否缺少强制转换?) 提前感谢!
1个回答

24

languages 的值是对一个 List<> 的引用,但随后你在它上面调用了 Take(10),这不会返回一个列表。

只需要移动你的 ToList() 调用位置:

IEnumerable<Models.Browser.Language> languages = GetLanguages(dateDrom, dateTo);
IList<Models.Browser.Language> primaryItems = languages.Take(10).ToList();

或者只需在一个调用中完成:

var primaryItems = GetLanguages(dateDrom, dateTo).Take(10).ToList();

另外,这并不完全正确:

当我已经收到它们后,我想在末尾添加一些模型。

另一种方法是使用Concat。例如:

var items = GetLanguages(dateDrom, dateTo).Take(10).Concat(fixedItems);

非常感谢您的超快速回复。现在它按预期工作了。非常感谢您的帮助! - mmmmm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接