您在Tag
循环内使用的是对象的相同实例,因此对的每次更新TagName
都指向相同的引用。在循环内移动声明,以在循环的每个遍历上获取一个新鲜的对象:
foreach (string t in tagList)
{
Tag _tag = new Tag(); // create new instance for every iteration
_tag.tagName = t;
tags.Add(_tag);
}
对于额外的部分- 当您Tag
从复制操作更改class
为struct
复制操作(调用时发生)时,tags.Add(_tag)
复制整个实例(本质上是创建一个新实例),与原始class
情况不同,在原始情况下,仅将同一个实例的引用复制到调用的参数中,然后复制到列表的元素(有关如何传递给方法调用的说明,请参见C#按值传递与按引用struct
传递)。