这可能是非常简单的愚蠢问题,但我只需要一些帮助来理解它。 我将一个结构存储在字典中,我想获取该结构更改一些值,然后让它在字典中自动更新,但行为很奇怪。
public struct Test
{
public int a;
}
public class Tester
{
public static Dictionary<int, Test> d = new Dictionary<int, Test>();
public static bool GetTest(int position, out Test test)
{
if (d.ContainsKey(position)) {
test = d[position];
return true;
} else {
test = new Test();
return false;
}
}
}
当我尝试从字典中获取结构并更改值时,它不会更新。
Test n = new Test();
n.a = 10;
Tester.d.Add(n.a, n);
Tester.GetTest(10, out Test t1);
Debug.Log(t1.a);
t1.a = 20;
Tester.GetTest(10, out Test t2);
Debug.Log(t2.a);
一直显示 10。所以当我使用
out
参数时,它会在字典中创建结构的副本并返回它? 所以我需要再写一行来更新字典,对吗?
获取结构体并在字典中更新其值而不添加额外行的简单方法是什么?
编辑:
我可以做到这一点...
Tester.d[position].a = 20;
但是有没有办法用方法来做到这一点呢? 我在哪里可以获取整个结构、编辑值并自动在字典中更新? 抱歉问了这个愚蠢的问题,我只是不明白这种行为。
你不应该这样做。虽然可以更改结构内部的值,但即使该值嵌套在字典中(例如在您的示例中),您也应该尽量避免这种情况并将结构视为只读。如果要更新字典的值,请用新实例替换整个值,而不是操作其内容。否则行为很有可能不是您所期望的。
更换对性能的影响也应该很小。所以你可以做
Tester.d[position] = new Test() { a = 20 };