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

Rie*_*S13 1 c# dictionary parameter-passing

我的标题问题与这个问题完全相同

然而,这不回答我的问题.

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"]--;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码减少了d变量里面的Main方法的值,当它应该只减少c()方法内的值而不应该减少内部Main方法.如何保持Dictionaryin Main方法使值不会因传递参数而减少.

Blo*_*ard 5

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

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

var copy = d.ToDictionary(t=>t.Key, t=>t.Value);
Run Code Online (Sandbox Code Playgroud)