【问题标题】:All lists gets updated instead of just one element所有列表都会更新,而不仅仅是一个元素
【发布时间】:2016-12-18 10:16:13
【问题描述】:

在我的 C# 算法中,我使用了一个更新特定索引的列表,但每当我更新一个索引时,所有列表都会更新。请告诉我我做错了什么。

internal class Global
    {
        public string ChromosomeName { get; set; }
        public int start { get; set; }
        public int end { get; set; }
        public int Cluster { get; set; }
        public List<int> Marks { get; set; }
        public List<int> Annotations { get; set; }
    }
var globals= new List<Global>();
var this_global = globals.Where(a => a.ChromosomeName == ChromosomeName).ToList();

((this_global[k]).Marks)[indexOfMark] += value;

这是这个特定部分的代码,例如当我更新时 (this_global[25].Marks)[0]+=37;它更新了整个列表,并且“this_global”的所有元素都得到了更新,并且每个元素都有一个“列表标记”列表,每个人的标记列表在索引 0 上获得值“37”。

我愿意的结果:

index 25 :

chromosomename ....
start....
end....
Cluster....
Anno....
Marks = [37,0,0] 

all other indexes apart from index 25 :

chromosomename ....
start....
end....
Cluster....
Anno....
Marks = [0,0,0] 

实际结果:

index 25 :

chromosomename ....
start....
end....
Cluster....
Anno....
Marks = [37,0,0] 

all other indexes apart from index 25 :

chromosomename ....
start....
end....
Cluster....
Anno....
Marks = [37,0,0] 

【问题讨论】:

  • 您应该添加构建该 Marks 列表元素的代码。似乎您已将相同的实例放在 globals 的所有元素中

标签: c# list class .net-core


【解决方案1】:

看起来您正在使用 Marks 属性存储相同的 List&lt;int&gt; 实例。

当您设置此值时,可能值得只复制数组,尝试以下操作

global.Marks = new List<int>(marks);

【讨论】:

    猜你喜欢
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2012-10-08
    • 2015-08-08
    相关资源
    最近更新 更多