字典作为参数传递时会丢失值

时间:2016-06-16 01:26:31

标签: c# dictionary parameter-passing

我的标题问题与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方法中,以使值不会因传递参数而减少。

2 个答案:

答案 0 :(得分:5)

Dictionary是参考类型。传递数据时,您不会复制数据。您只是将引用传递给同一个底层对象。

如果要修改副本,则需要明确制作副本;试试:

var copy = d.ToDictionary(t=>t.Key, t=>t.Value);

答案 1 :(得分:3)

在传递到方法c

之前创建字典副本
c(new Dictionary<string, int>(d));

否则,变量指向同一个对象。

相关问题