不带参数的 C# 结构体

问题描述 投票:0回答:1

这可能是非常简单的愚蠢问题,但我只需要一些帮助来理解它。 我将一个结构存储在字典中,我想获取该结构更改一些值,然后让它在字典中自动更新,但行为很奇怪。

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;

但是有没有办法用方法来做到这一点呢? 我在哪里可以获取整个结构、编辑值并自动在字典中更新? 抱歉问了这个愚蠢的问题,我只是不明白这种行为。

c# function dictionary struct reference
1个回答
0
投票

你不应该这样做。虽然可以更改结构内部的值,但即使该值嵌套在字典中(例如在您的示例中),您也应该尽量避免这种情况并将结构视为只读。如果要更新字典的值,请用新实例替换整个值,而不是操作其内容。否则行为很有可能不是您所期望的。

更换对性能的影响也应该很小。所以你可以做

Tester.d[position] = new Test() { a = 20 };
© www.soinside.com 2019 - 2024. All rights reserved.