简体   繁体   English

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

[英]C# Convert IEnumerable to IList using .ToList()?

I am using an external library thats returns a IEnumerable . 我正在使用一个返回IEnumerable的外部库。 After I have recieved them I would like to add some models to the end. 在我收到它们之后,我想在最后添加一些模型。 That only seems possible when using an IList or some other collection. 只有在使用IList或其他集合时才有可能。 So when i'm trying to convert the IEnumerable to a list using the .ToList() method it returns an IEnumerable . 因此,当我尝试使用.ToList()方法将IEnumerable转换为列表时,它返回一个IEnumerable That's not the what I expected? 那不是我的预期? Am I using .ToList() correct? 我使用.ToList()是否正确? Or what else would solve my problem? 或者还有什么能解决我的问题?

This is my code i have so far: 这是我到目前为止的代码:

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

This last line produces an error saying: 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?) 最后一行产生错误说: 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?) 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?)

Thanks in advance! 提前致谢!

The value of languages is a reference to a List<> , but then you're calling Take(10) on that, which doesn't return a list. languages的值是对List<>的引用,但是你在那里调用Take(10) ,它返回列表。

Just move your ToList() call: 只需移动您的ToList()调用:

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

Or just do it in one call: 或者只是在一个电话中执行:

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

Also, this isn't quite correct: 另外,这不太正确:

After I have recieved them I would like to add some models to the end. 在我收到它们之后,我想在最后添加一些模型。

An alternative is to use Concat . 另一种方法是使用Concat For example: 例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM