如何在struct list的单个元素中更新变量

时间:2017-05-15 12:59:55

标签: c# list struct

我有一个包含数字变量的结构

public struct A
{
    public int x;
    public string y;
}

我还有一个结构类型列表:List<A> l = new List<A>()

在列表中添加noumerus元素之后,想要将值设置为变量y,但仅适用于x = 1的元素

我能够在列表中找到满足条件的元素

l.Find(item => item.x == 1) 

我怎样才能为该特定元素设置y的值? 我尝试了基本的方式(从我的意见),但它错了

l.Find(item => item.x == 1).y="valueX"

提前谢谢

1 个答案:

答案 0 :(得分:4)

这是使用mutable strcuts is pure evil的一个完美示例。基本上,每当您的值可能发生变化时,您应该考虑使用类而不是struct。

截至MSDN

  

X不要定义可变值类型

你遇到的问题源于这样一个事实:结构是值类型,只要传递给成员或从成员返回就会被复制 - 在你的案例List.Find中。因此,通过Find收到的实例的任何更新都不会反映到列表中的实例中。你可以通过使用数组而不是列表来扼杀它,但这也是一个坏主意,因为它隐藏了实际问题。