同时在异常到达的对象列表中通过'AddRange()'添加元素

时间:2016-12-19 06:25:52

标签: c# list generics

“源数组不够长。检查srcIndex和length,以及数组的下限。”

我在创建目的地列表(我正在添加对象的位置)和源列表(从我在目标列表中添加对象的位置)时没有提到任何大小

以下是我正在做的类似代码。

List<Obj> sourceList = respObj.List;

if (sourceList  != null)
{
     destinationList.AddRange(sourceList);
}

这里的sourceList是从一个方法调用返回的,而且在创建它时我也没有提到任何大小或索引。 就这么简单。

//destination list is globally declared, and initialized in constructor
public List<Obj> destinationList;
//Constructor
public Class()
{
    destinationList = new List<Obj>();
}

List<Obj> Method()
{
     List<Obj> sourceList = new List<Obj>();
     foreach(Obj obj in AlreadyGeneratedObjList)
     {
          if(SatisfyingCondition(obj))
          {
               sourceList.Add(obj);
          }  
     }
     return sourceList;
}

“AddRange()”方法

发生异常

1 个答案:

答案 0 :(得分:0)

我认为destinationList被声明为

var destinationList = [?]{}; // ? being some size

问题在于,您的数组无法自动调整大小,这是.AddRange()能够将sourceList的内容添加到其中所需的内容。

解决这个问题的方法是将destinationList声明为列表

var destinationList = new List<obj>{};

或作为具有正确大小的数组,即。在过滤后容纳sourceList大小的大小。这可能不是最好的方法。

我的个人建议是使用List<>

另外,请不要忘记检查已过滤的sourceList是否为空或为空。

修改

您应该考虑将其更改如下

if (sourceList != null && sourceList.Count > 0)
{
     destinationList.AddRange(sourceList);
}
else
{
     //destinationList = sourceList;
     // If the sourceList is ever null it will make every subsequent call
     // destinationList fail with a NullReference exception.

     destinationList.Clear();
}