Dictionary 的问题。。

zsyok 2011-08-27 12:44:52

static void Main(string[] args)
{
Dictionary<string, string> Diction = new Dictionary<string,string>();
Diction.Add("aa", "11111");
aa(Diction);//为何我把这个参数传进去,Diction 会多添加了key为bb的一项???是引用类型吗?不用ref么?
foreach (string k in Diction.Keys)
{
Console.WriteLine(Diction[k]);
//结果 11111
//22222
}
}
public static void aa(Dictionary<string, string> sss)
{
Dictionary<string, string> xx = new Dictionary<string, string>();
xx = sss;
xx.Add("bb", "22222");
}


...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsyok 2011-08-27
  • 打赏
  • 举报
回复
怎样才能在方法里, xx.Add 后不影响Diction 的个数?
ljx09195117 2011-08-27
  • 打赏
  • 举报
回复
面向对象没学好
你把对象Diction放进去添加了东西,那他当然就多了啊
本来就不用ref的
不要以为传进去Diction,在方法aa里的Diction就是另一个,其实他还是方法外传进去的Diction,在方法aa里对Diction的任何操作都是直接对其本身的操作
aa传进来的参数就是Diction这个对象,理解好
huangwenquan123 2011-08-27
  • 打赏
  • 举报
回复
lz试下这两个就知道区别了。
        public static void aa(Dictionary<string, string> sss)
{
Dictionary<string, string> xx = new Dictionary<string, string>();
xx = sss;
xx.Add("bb", "22222");
}

public static void aa(Dictionary<string, string> sss)
{
Dictionary<string, string> xx = new Dictionary<string, string>();
xx.Add("bb", "22222");
xx = sss;
}

cykb518 2011-08-27
  • 打赏
  • 举报
回复
你要不就传一个空的Diction进去,要不就new一个新的,就想楼上所说的,你代码里面在new的时候,其实是new了一个指向你之前定义的Diction
moonwrite 2011-08-27
  • 打赏
  • 举报
回复
Dictionary<string, string> xx = new Dictionary<string, string>();
xx = sss;

xx是你new出来的 然后你又让xx指向sss;
也就是new Dictionary<string, string>(); 新new出来的被放弃了

如果你直接sss = new Dictionary<string, string>();
那么就是指向一个新的了

linus2008117 2011-08-27
  • 打赏
  • 举报
回复
虽然你new了 但是下面在做指针赋值
xx = sss;
zsyok 2011-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 linus2008117 的回复:]
public static void aa(Dictionary<string, string> sss)

方法传递的是引用类型,参数是值类型(如int long 等),在方法中的任何修改都不会影响原值。参数是引用类型(定义的类),在方法中的修改会影响原值,你可以将引用类型理解为指针。
[/Quote]

我也知道·但为什么会这样。我已经NEW 过了#
linus2008117 2011-08-27
  • 打赏
  • 举报
回复
public static void aa(Dictionary<string, string> sss)

方法传递的是引用类型,参数是值类型(如int long 等),在方法中的任何修改都不会影响原值。参数是引用类型(定义的类),在方法中的修改会影响原值,你可以将引用类型理解为指针。
bingo_ 2011-08-27
  • 打赏
  • 举报
回复
引用类型


public static void aa(Dictionary<string, string> sss)
{
Dictionary<string, string> xx = new Dictionary<string, string>(sss);
// xx = sss;
xx.Add("bb", "22222");
}

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧