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

mmm*_*mmm 3 .net c# ienumerable ilist

我正在使用一个返回a的外部库IEnumerable.在我收到它们之后,我想在最后添加一些模型.只有在使用IList或其他一些集合时才有可能.因此,当我尝试IEnumerable使用该.ToList()方法将其转换为列表时,它返回一个IEnumerable.那不是我的预期?我使用.ToList()正确吗?或者还有什么能解决我的问题?

这是我到目前为止的代码:

IList<Models.Browser.Language> languages = GetLanguages(dateDrom, dateTo).ToList();
IList<Models.Browser.Language> primaryItems = languages.Take(10);
Run Code Online (Sandbox Code Playgroud)

最后一行产生错误说: Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Bogus.Models.Browser.Language>' to 'System.Collections.Generic.IList<Bogus.Models.Browser.Language>'. An explicit conversion exists (are you missing a cast?)

提前致谢!

Jon*_*eet 24

languages是对a的引用List<>,但是你要调用Take(10)它,它返回列表.

只需移动你的ToList()电话:

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

或者只是在一个电话中执行:

var primaryItems = GetLanguages(dateDrom, dateTo).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

另外,这不太正确:

在我收到它们之后,我想在最后添加一些模型.

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

var items = GetLanguages(dateDrom, dateTo).Take(10).Concat(fixedItems);
Run Code Online (Sandbox Code Playgroud)