无法在C#中将一个列表附加到另一个列表...尝试使用AddRange

时间:2009-11-12 19:09:42

标签: c# asp.net-mvc list repository addrange

您好我正在尝试将1个列表附加到另一个列表中。我之前使用AddRange()完成了它,但它似乎没有在这里工作......这是代码:

IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);                
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId);
resultCollection.ToList().AddRange(resultCollection2);

我做了调试以检查结果,这是我得到的结果:resultCollection计数为4 resultCollection2计数为6,添加范围后,resultCollection仍然只有计数为4时,计数为10。

谁能看到我做错了什么?任何帮助表示赞赏。

谢谢,
马特

5 个答案:

答案 0 :(得分:31)

当您致电ToList()时,您没有将收藏品包裹在List<T>中,而是创建一个包含相同项目的新List<T>。所以你在这里有效地做的是创建一个新的列表,向它添加项目,然后扔掉列表。

您需要执行以下操作:

List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);

或者,如果您使用的是C#3.0,只需使用Concat,例如

resultCollection.Concat(resultCollection2); // and optionally .ToList()

答案 1 :(得分:4)

我认为.ToList()正在创建一个新的集合。因此,您的商品将被添加到一个新的集合中,该集合会立即被丢弃并且原始文件保持不变。

答案 2 :(得分:1)

resultCollection.ToList()将返回一个新列表。

尝试:

List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);

答案 3 :(得分:1)

尝试

<击>     IList newList = resultCollection.ToList()。AddRange(resultCollection2);

List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);

答案 4 :(得分:0)

您可以使用以下任何一项:

List<E> list = resultCollection as List<E>;
if (list == null)
    list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

或者:

// Edit: this one could be done with LINQ, but there's no reason to limit
//       yourself to .NET 3.5 when this is just as short.
List<E> list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

或者:

List<E> list = new List<E>(resultCollection.Concat(resultCollection2));