我的标题问题与this question
完全相同然而,这并没有回答我的问题。
static void Main() {
Dictionary<string,int> d=new Dictionary<string,int>();
d["asu"]=1;
d["babi"]=1;
c(d);
Console.Write(d["asu"]);
//output=0
}
static void c(Dictionary<string,int> d){
d["asu"]--;
}
上面的代码会减少d
方法中Main
变量中的值,此时它应该只减少c()
方法中的值,并且不应该减少Main
方法内的值。如何将Dictionary
保留在Main
方法中,以使值不会因传递参数而减少。
答案 0 :(得分:5)
Dictionary
是参考类型。传递数据时,您不会复制数据。您只是将引用传递给同一个底层对象。
如果要修改副本,则需要明确制作副本;试试:
var copy = d.ToDictionary(t=>t.Key, t=>t.Value);
答案 1 :(得分:3)
在传递到方法c
之前创建字典副本c(new Dictionary<string, int>(d));
否则,变量指向同一个对象。