我目前非常厌倦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";
但是,有没有办法让我更新整个值而不是手动更新每个属性?
答案 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)
你确实从字典中获取了值作为参考,但你应该知道字典中的哪个存储也是一个引用,你只需要为它指定另一个引用。