从字典中获取价值作为参考

时间:2014-06-19 08:24:03

标签: c# .net dictionary reference-type

我目前非常厌倦C#词典。我试图为使用词典编写缓存,但我似乎无法让它工作:

class Program
{
    static Dictionary<int, Value> dict;

    static void Main(string[] args)
    {
        dict = new Dictionary<int,Value>();
        Value v = new Value() { Hello = 1, Bye = "QWERTY"};
        dict.Add(1, v);
        Value c = dict[1];
        Console.WriteLine(c.Bye);
        dict[1] = new Value() { Hello = 2, Bye = "ASDF" };
        Console.WriteLine(c.Bye);
    }
}

class Value
{
    public int Hello {get;set;}
    public string Bye {get;set;}
}

当前输出:

QWERTY
QWERTY

输出I&#39; m寻找:

QWERTY
ASDF

修改

我设法让它现在正常运行,使用:

//dict[1] = new Value() { Hello = 2, Bye = "ASDF" };
dict[1].Hello = 2;
dict[1].Bye = "ASDF";

但是,有没有办法让我更新整个值而不是手动更新每个属性?

3 个答案:

答案 0 :(得分:0)

它工作正常,问题是您正在使用引用(c)到原始实例。您的参考文献不会自动更新。

这表明它正在做你想做的事:

dict = new Dictionary<int,Value>();
Value v = new Value() { Hello = 1, Bye = "QWERTY"};
dict.Add(1, v);
Value c = dict[1];
Console.WriteLine(c.Bye);
dict[1] = new Value() { Hello = 2, Bye = "ASDF" };
Console.WriteLine(dict[1].Bye);//THIS LINE IS CHANGED

所以只是为了澄清,你已经按照你的要求更新了整个价值。

只是一个建议,但它可能有助于您解释您想要达到的最终结果。可能有更好的方法来解决它。

答案 1 :(得分:0)

c = dict[1] = new Value() { Hello = 2, Bye = "ASDF" };

否则,你想要的东西对我来说没有意义。您已告诉语言将c指定给其他人。

答案 2 :(得分:0)

你确实从字典中获取了值作为参考,但你应该知道字典中的哪个存储也是一个引用,你只需要为它指定另一个引用。