将IEnumberable <string>转换为IEnumberable <ListItem>

Dan*_*ell 3 c# asp.net ienumerable listitem yield-return

我在尝试使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 5

您不需要,yield return from ...只需return from ...或您可以:

private IEnumerable<ListItem> ToListItem(IEnumerable<string> results)
{
    return results.Select(s => new ListItem(s));
}
Run Code Online (Sandbox Code Playgroud)

甚至摆脱这个功能,并:

dropDown.Items.AddRange(items.Select(s => new ListItem(s)).ToArray());
Run Code Online (Sandbox Code Playgroud)