3

C# で yield return 機能を使用しようとすると、このエラーが発生します。Visual Studio内の選択でエラーが表示され、よくわかりません。私の考えでは、文字列を ListItem に変換してから、ロットを IEnumerable として返しています。yield return と 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 は、IEnumerable が繰り返されるときに「遅延」の方法で返される単一の ListItem を参照する必要があります。linq 式は IEnumerable 型であるため、不一致があります。

于 2011-01-19T10:30:37.540 に答える