我在尝试使用C#中的yield return功能时遇到此错误。错误出现在视觉工作室内部的选择中,我真的不明白。在我看来,我正在将一个字符串转换为ListItem,然后将该批次作为IEnumerable返回。我对收益率回报和IEnumerable的理解可能很不合适,所以任何帮助都会受到赞赏。评论的代码是老式的做法,它可以正常工作。
无法隐式转换类型 'System.Collections.Generic.IEnumerable' 至 'System.Web.UI.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;
}
}
答案 0 :(得分:5)
您不需要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());
答案 1 :(得分:3)
private IEnumerable<ListItem> ToListItem(IEnumerable<string> results)
{
return results.Select(x => new ListItem(x));
}
答案 2 :(得分:1)
yield return应该引用一个ListItem,当迭代IEnumerable时,它将以'懒惰'的方式返回。您的linq表达式是IEnumerable类型,因此存在不匹配。