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

C# 字典作为参数传递时会丢失值,c#,dictionary,parameter-passing,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>

我的题目和你的完全一样

然而,这并不能回答我的问题

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"]--;
}
static void Main(){
字典d=新字典();
d[“asu”]=1;
d[“babi”]=1;
c(d);
Console.Write(d[“asu”]);
//输出=0
}
静态无效c(字典d){
d[“asu”]-;
}

上述代码在
d
变量内
Main
方法中减少一个值,此时它只应在
c()
方法内减少值,而不应在
Main
方法内减少值。如何在
Main
方法中保留
字典
,使值不会因传递的参数而减少。

字典
是一种引用类型。传递数据时,您并不是在复制数据。您只是在传递对同一基础对象的引用

如果要修改副本,则需要显式创建副本;尝试:

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

字典
是一种引用类型。传递数据时,您并不是在复制数据。您只是在传递对同一基础对象的引用

如果要修改副本,则需要显式创建副本;尝试:

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

在传递到方法c之前创建字典副本

c(new Dictionary<string, int>(d));
c(新词典(d));

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

在传递到方法c之前创建字典副本

c(new Dictionary<string, int>(d));
c(新词典(d));

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

这是正确的。字典是一种引用类型。通过将对d的引用传递给函数c,您可以赋予c更改原始d的权力。如果不希望发生这种情况,则必须显式创建字典的新副本。这是正确的。字典是一种引用类型。通过将对d的引用传递给函数c,您可以赋予c更改原始d的权力。如果不希望发生这种情况,则必须显式创建字典的新副本。请删除。请删除