【问题标题】:while adding element by 'AddRange()' in List of object following exception arrives在异常到达的对象列表中通过“AddRange()”添加元素时
【发布时间】:2016-12-19 06:25:52
【问题描述】:

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

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

这是我正在做的类似代码。

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()”方法发生异常

【问题讨论】:

  • 显示您的destinationList的声明
  • destinationList 在构造函数中也简单地声明为new List&lt;Obj&gt;()
  • destinationList 是数组而不是列表。我看不出 AddRange 在列表中失败的原因
  • @M.kazemAkhgary 目的地列表是 List&lt;Obj&gt; ,它是通用列表。

标签: c# list generics


【解决方案1】:

我假设 destinationList 被声明为

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

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

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

var destinationList = new List<obj>{};

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

我个人的建议是使用List&lt;&gt;

另外不要忘记检查过滤后的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();
}

【讨论】:

  • 我同意你的建议,destinationList 只是一个列表。而且我正在检查Null。 (您可以在我发布的示例代码中看到它)
  • 在这种情况下,如果没有看到应用程序的整个流程,很难说还有什么问题,但我认为一旦 sourceList 第一次为空,您就会遇到问题。之后,您将开始收到 NullReference 异常。查看我的编辑。
  • 是的,我必须说这是你所展示的一个严重问题。谢谢你。是的,我真正的问题一定是不同的。我必须检查更多细节。如果我有东西会更新。
  • @AmitNatural 你知道他们怎么说“分享就是关怀”;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2021-08-23
  • 2021-10-09
相关资源
最近更新 更多