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的权力。如果不希望发生这种情况,则必须显式创建字典的新副本。请删除。请删除