我有一个包含数字变量的结构
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"
提前谢谢
答案 0 :(得分:4)
这是使用mutable strcuts is pure evil的一个完美示例。基本上,每当您的值可能发生变化时,您应该考虑使用类而不是struct。
截至MSDN:
X不要定义可变值类型
你遇到的问题源于这样一个事实:结构是值类型,只要传递给成员或从成员返回就会被复制 - 在你的案例List.Find
中。因此,通过Find
收到的实例的任何更新都不会反映到列表中的实例中。你可以通过使用数组而不是列表来扼杀它,但这也是一个坏主意,因为它隐藏了实际问题。