“源数组不够长。检查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()”方法
发生异常答案 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();
}