簡體   English   中英

轉換IEnumerable <string> 到IEnumerable <ListItem>

[英]Converting an IEnumerable<string> to IEnumerable<ListItem>

我在嘗試使用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;
    }
}

你不需要yield return from ...那里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());
private IEnumerable<ListItem> ToListItem(IEnumerable<string> results)
    {
        return results.Select(x => new ListItem(x));
    }

yield return應該引用一個ListItem,當IEnumerable被迭代時,它將以'懶惰'的方式返回。 您的linq表達式是IEnumerable類型,因此存在不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM