【发布时间】:2014-06-19 08:24:02
【问题描述】:
我目前对 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
我正在寻找的输出:
QWERTY
ASDF
编辑:
我现在设法让它工作,使用:
//dict[1] = new Value() { Hello = 2, Bye = "ASDF" };
dict[1].Hello = 2;
dict[1].Bye = "ASDF";
但是,有没有办法让我更新整个值而不是手动更新每个属性?
【问题讨论】:
-
你给了
dict[1]一个新的参考。Value c仍然引用了旧的dict[1]。 -
嗯,你也在手动更新原始代码中的每个属性,那么有什么区别?
-
你所做的很像
Value v = XXX; Value c = v; /* copies reference, now two references to same instance */ v = YYY; /* assigns new reference to another instance to v; v and c no longer refer the same instance */。所以这也发生在变量上,并且与Dictionary<,>没有真正的关系。两个变量不能以您想要的方式“链接”,因此对其中一个变量的赋值会“自动分配”给另一个变量。这种行为的唯一情况是带有ref(或out)修饰符的方法参数。
标签: c# .net dictionary reference-type