Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象添加到列表会导致覆盖所有以前的值,尽管循环中有新的实例化_C#_Arrays_List_Object - Fatal编程技术网

C# 将对象添加到列表会导致覆盖所有以前的值,尽管循环中有新的实例化

C# 将对象添加到列表会导致覆盖所有以前的值,尽管循环中有新的实例化,c#,arrays,list,object,C#,Arrays,List,Object,首先,我想声明,我已经复习了StackOverflow上的所有其他类似问题,例如,和,这可能会使这个问题看起来像是重复的 在这些问题中,问题似乎是每次都覆盖同一个实例,解决方法是在循环中实例化新对象。另一个错误是静态声明不正确。那些药方对我不起作用 这是一段让我头疼的片段的背景代码 // list of bytes of messages parsed from RS232 feed from a single frame List<byte> byte_mes =

首先,我想声明,我已经复习了StackOverflow上的所有其他类似问题,例如,和,这可能会使这个问题看起来像是重复的

在这些问题中,问题似乎是每次都覆盖同一个实例,解决方法是在循环中实例化新对象。另一个错误是静态声明不正确。那些药方对我不起作用

这是一段让我头疼的片段的背景代码

    // list of bytes of messages parsed from RS232 feed from a single frame
    List<byte> byte_mes = new List<byte>();

    // list of parsed messeges
    List<MessageVM> Messages = new List<MessageVM>();
最初我尝试了这个代码
Messages.Add(newmessagevm(byte_mes,message_id)),但结果相同,因此决定更加详细

这是我在执行后从控制台输出接收的优先级。
除了第一个字节中的计数器外,所有消息都是相同的。 它成功加载每条消息,并按预期添加第一条消息。
在随后的迭代中,
列表消息的大小会增加,但现在它所持有的每个值都会被最新到达的值所取代

Received: 30-02-28-88-88-88-88-88-88-88-88
----------------------------------------
Messages vector size = 1
Payload in Messages [0] 30-02-28-88-88-88-88-88-88-88-88 

Received: 31-02-28-88-88-88-88-88-88-88-88
----------------------------------------
Messages vector size = 2
Payload in Messages [0] 31-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [1] 31-02-28-88-88-88-88-88-88-88-88 

Received: 32-02-28-88-88-88-88-88-88-88-88
----------------------------------------
Messages vector size = 3
Payload in Messages [0] 32-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [1] 32-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [2] 32-02-28-88-88-88-88-88-88-88-88 

Received: 33-02-28-88-88-88-88-88-88-88-88
----------------------------------------
Messages vector size = 4
Payload in Messages [0] 33-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [1] 33-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [2] 33-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [3] 33-02-28-88-88-88-88-88-88-88-88 

Received: 34-02-28-88-88-88-88-88-88-88-88
----------------------------------------
Messages vector size = 5
Payload in Messages [0] 34-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [1] 34-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [2] 34-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [3] 34-02-28-88-88-88-88-88-88-88-88 
Payload in Messages [4] 34-02-28-88-88-88-88-88-88-88-88 
我相信我确实在每个循环上实例化了新对象,所以不确定为什么列表的先前值会被覆盖,而列表本身在循环之外声明。任何帮助都将不胜感激。

尝试替换

var PenIsland = new MessageVM(byte_mes, message_id);

var PenIsland=newmessagevm(新列表(字节),消息id);

这将为每个
MessageVM
对象分配其自己的
List
实例。

您每次都创建一个新的
MessageVM
对象,是的,但所有
m.PayLoad
引用相同的
List byte\u mes
实例
byte_mes
将被修改为新值,因此可以解释您得到的结果。好的,这是有意义的。现在我看到它们都指向同一个实例,因此在我更改时发生了更改。那是一个巨大的疏忽。非常感谢。
var PenIsland = new MessageVM(byte_mes, message_id);
var PenIsland = new MessageVM(new List<byte>(byte_mes), message_id);