3

我在尝试使用 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;
    }
}
4

3 回答 3

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());
于 2011-01-19T10:19:08.900 回答
3
private IEnumerable<ListItem> ToListItem(IEnumerable<string> results)
    {
        return results.Select(x => new ListItem(x));
    }
于 2011-01-19T10:24:49.150 回答
1

yield return should refer to a single ListItem which would be returned in a 'lazy' way when the IEnumerable is iterated. Your linq expression is of type IEnumerable so there is a mismatch.

于 2011-01-19T10:30:37.540 回答