C# 从字典中获取值作为引用
我现在非常喜欢C#字典。我正在尝试使用字典为a编写缓存,但似乎无法使其正常工作: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
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" };