【问题标题】:Converting an IEnumerable<string> to IEnumerable<ListItem>将 IEnumerable<string> 转换为 IEnumerable<ListItem>
【发布时间】:2011-06-11 16:00:53
【问题描述】:

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

【问题讨论】:

  • 在我看来 ToListItem 最好命名为 ToListItems ,因为它返回许多 ListItem s。

标签: c# asp.net ienumerable listitem yield-return


【解决方案1】:

您不需要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());

【讨论】:

  • 嘎,被验证码打败了。说起来,一旦我达到一定水平,它会被关闭吗?
  • 哦,我真是太白痴了。我忘记了选择运算符无论如何都会返回集合。因此,收益回报不喜欢集合。在我的辩护中,这是一个漫长的一周。感谢您指出这一点。
  • @Beliskner,不,它不会被关闭。
【解决方案2】:
private IEnumerable<ListItem> ToListItem(IEnumerable<string> results)
    {
        return results.Select(x => new ListItem(x));
    }

【讨论】:

    【解决方案3】:

    yield return 应该引用单个 ListItem,当迭代 IEnumerable 时,它​​将以“惰性”方式返回。您的 linq 表达式的类型为 IEnumerable,因此不匹配。

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      相关资源
      最近更新 更多