2012-05-24 3 views
2

Я использую внешнюю библиотеку, которая возвращает IEnumerable. После того, как я их получил, я хотел бы добавить некоторые модели к концу. Это возможно только при использовании IList или какой-либо другой коллекции. Поэтому, когда я пытаюсь преобразовать IEnumerable в список, используя метод .ToList(), он возвращает IEnumerable. Это не то, чего я ожидал? Использую ли я .ToList() правильно? Или что еще может решить мою проблему?C# Преобразование IEnumerable в IList с использованием .ToList()?

Это мой код, который я до сих пор:

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

Последняя строка выдает ошибку, говоря: 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?)

Заранее спасибо!

ответ

22

Значение 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); 
+0

Спасибо за безумно быстрое решение. Теперь он работает так, как ожидалось. Очень ценю вашу помощь! –