C# 从字典中获取值作为引用

C# 从字典中获取值作为引用,c#,.net,dictionary,reference-type,C#,.net,Dictionary,Reference Type,我现在非常喜欢C#字典。我正在尝试使用字典为a编写缓存,但似乎无法使其正常工作: class Program { static Dictionary<int, Value> dict; static void Main(string[] args) { dict = new Dictionary<int,Value>(); Value v = new Value() { Hello = 1, Bye = "QWER

我现在非常喜欢C#字典。我正在尝试使用字典为a编写缓存,但似乎无法使其正常工作:

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
ASDF
编辑:

我现在设法让它工作,使用:

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

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

它工作正常,问题是您正在使用对原始实例的引用(
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
dict=newdictionary();
Value v=new Value(){Hello=1,Bye=“QWERTY”};
添加(1,v)条;
值c=dict[1];
控制台。写线(c.Bye);
dict[1]=新值(){Hello=2,Bye=“ASDF”};
Console.WriteLine(dict[1].Bye)//这条线改了
因此,为了澄清,您已经在根据您的需求更新整个值

这只是一个建议,但它可能有助于你解释你想要达到的最终结果。也许有更好的办法

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

否则,你想要的对我来说没有意义。您必须告诉该语言将c指定给其他对象。

您确实从字典中获得了值作为引用,但您应该知道字典中的存储也是引用,您只需将另一个引用指定给它。

您已经给了
dict[1]
一个新引用。
值c
仍然引用了旧的
dict[1]
。那么,您也在手动更新原始代码中的每个属性,那么有什么区别呢?您所做的很像
值v=XXX;值c=v;/*复制引用,现在将两个引用复制到同一实例*/v=YYY;/*将另一实例的新引用指定给v;v和c不再引用同一实例*/
。因此,这种情况也发生在变量上,实际上与
字典
无关。两个变量不能按您想要的方式“链接”,因此其中一个变量的赋值将“自动赋值”到另一个变量。这种行为的唯一情况是带有
ref
(或
out
)修饰符的方法参数。
c = dict[1] = new Value() { Hello = 2, Bye = "ASDF" };