Преобразование IEnumberable в IEnumberable
Я получаю эту ошибку, которая при попытке использовать функцию возврата yield в C#. Ошибка появляется на select в visual studio, и я действительно не понимаю ее. В своем уме я преобразую строку в ListItem, а затем возвращаю лот как IEnumerable. Мое понимание отдачи и IEnumerable может быть очень далеко от цели, поэтому любая помощь будет оценена. Комментируемый код-это старый школьный способ его выполнения, который работает должным образом.
Не может неявно преобразовать тип - Система.Коллекции.Родовой.IEnumerable' к - Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.WebControls.ListItem '
public partial class CloseIncident : System.Web.UI.Page
{
private ClevelandIncidentRepository repo = new ClevelandIncidentRepository();
protected void Page_Load(object sender, EventArgs e)
{
SetDropDown(InitialType, repo.GetMainTypes());
}
private void SetDropDown(DropDownList dropDown, IEnumerable<string> items)
{
dropDown.Items.Clear();
dropDown.Text = string.Empty;
dropDown.Enabled = items.Count() > 0;
dropDown.Items.AddRange(ToListItem(items).ToArray());
}
private IEnumerable<ListItem> ToListItem(IEnumerable<string> results)
{
yield return from result in results
select new ListItem(result);
//List<ListItem> items = new List<ListItem>();
//items.AddRange(from result in results
// select new ListItem(result));
//return items;
}
}
3 ответа:
Вам не нужно
yield return from ...
, а простоreturn from ...
или вы можете:private IEnumerable<ListItem> ToListItem(IEnumerable<string> results) { return results.Select(s => new ListItem(s)); }
Или даже избавиться от этой функции и:
dropDown.Items.AddRange(items.Select(s => new ListItem(s)).ToArray());