深层复制助手会导致索引越界

时间:2016-09-22 13:36:03

标签: c# object dictionary deep-copy

我有一个包含对象的字典作为值Dictionary<String, Object>。使用深层拷贝我正在创建字典的克隆。将克隆添加到变量中,对于我添加key + "String"的每个键,将其作为数据表中的列包含与字典中的键相同的列数和值。将此更新的dictionary[key]添加到列表并将列表添加到数据表中。

此过程运行正常,但有时会导致

  

索引超出了数组的范围。

  

目标数组不够长,无法复制集合中的所有项目。检查数组索引和长度。

任何人都可以帮助我,让我知道偶然发生此错误的原因。

Dictionary<String, Object> obj=
    DeepCopyHelper.Clone(taskResult.TaskStatistics.TaskSpecificData.StatisticsData());
var taskSpecificRefData = new Dictionary<String, Object>(obj);
foreach (String key in taskSpecificRefData.Keys)
{
    if (!dtReturn.Columns.Contains(key + "Ref"))
    {
        dtReturn.Columns.Add(key + "Ref");
        dataRowObjects.Add(taskSpecificRefData[key]);
    }
}
dtReturn.Rows.Add(dataRowObjects.ToArray());






 public static T Clone<T>(T source)
        {
            if (!typeof(T).IsSerializable)
            {
                throw new ArgumentException("The type must be serializable.", "source");
            }
            if (Object.ReferenceEquals(source, null))
            {
                return default(T);
            }
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new MemoryStream();
            using (stream)
            {
                formatter.Serialize(stream, source);
                stream.Seek(0, SeekOrigin.Begin);
                return (T)formatter.Deserialize(stream);
            }
        }

0 个答案:

没有答案