【问题标题】:IEnumerable doesn't Add itemsIEnumerable 不添加项目
【发布时间】:2014-03-26 18:04:25
【问题描述】:

为什么IEnumerable 没有添加项目?

此代码将项目添加到“值”列表:

List<String> values = new List<String>();
for (int i = 0; i < ddlTransportadora.Items.Count; i++)
{
    values.Add(ddlTransportadora.Items[i].Value);
}

但是这段代码会产生循环,并且之后的值没有 itens:

IEnumberable<String> values = new List<String>();
for (int i = 0; i < ddlTransportadora.Items.Count; i++)
{
    values.Add(ddlTransportadora.Items[i].Value);
}

有什么想法吗?

【问题讨论】:

  • 我很惊讶第二个示例可以编译(假设它甚至可以编译)。 IEnumerable 没有 Add
  • IEnumerable&lt;T&gt;接口中没有方法Add
  • 另外,第一个例子有什么问题?您使用 IEnumerable 的原因通常是您想要迭代或使用 LINQ,但不关心底层源是 List 还是 Array。不是因为你想添加东西。

标签: c# .net list loops ienumerable


【解决方案1】:

因为IList&lt;T&gt;接口中定义的Add方法,而IEnumerable&lt;T&gt;不继承自IList&lt;T&gt;。你可以改用这个:

IList<String> values = new List<String>();
for (int i = 0; i < ddlTransportadora.Items.Count; i++)
{
    values.Add(ddlTransportadora.Items[i].Value);
}

【讨论】:

  • 我可以补充一下来自Enumerable这个词的意思吗?你能补充一下是不是很奇怪?
【解决方案2】:

所有这些都会给你一个IEnumerable&lt;string&gt;

您可以使用显式构造函数来构建和填充您的集合:

  • new List&lt;String&gt;( ddlTransportadora.Items.Select( x =&gt; x.Value ) )

您可以使用 LINQ 动态创建可枚举的集合:

  • ddlTransportadora.Items.Select( x =&gt; x.Value ).ToList()
  • ddlTransportadora.Items.Select( x =&gt; x.Value ).ToArray()

您甚至可以跳过创建实际集合,而只需使用 LINQ 延迟执行来提供数据的可枚举视图:

  • ddlTransportadora.Items.Select( x =&gt; x.Value )

为什么要让事情变得比他们需要的更复杂?

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2014-07-29
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多