为了账号安全,请及时绑定邮箱和手机立即绑定

c#奇怪的问题。高手进

c#奇怪的问题。高手进

LEATH 2018-12-07 04:01:47
为什么执行完set方法后.list还是为null  public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        List list = null;        private void button1_Click(object sender, EventArgs e)        {            set(list);        }        private void set(List l)        {            l = new List();        }    }
查看完整描述

9 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

这是一定的 , set 只是创建 I
查看完整回答
反对 回复 2018-12-09
?
富国沪深

TA贡献1790条经验 获得超9个赞

list = l=null 然后set 后 l 指向了其他的内存 list 还是老样子 null
查看完整回答
反对 回复 2018-12-09
?
开满天机

TA贡献1786条经验 获得超13个赞

你没 out或ref 。。
查看完整回答
反对 回复 2018-12-09
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

增加 out 或 ref 吧
查看完整回答
反对 回复 2018-12-09
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

上面的各位都是对的。 稍微补充一下:在C#里,方法的参数有引用传和值传两种。只有加了ref的才是引用传。值传时方法内部使用参数的副本,引用传世使用参数的引用。在你的代码里,set()方法的参数实际上传了list 变量的值,即指向null的内存地址(可以这样理解,实际上是一个包装过的指针),set()方法内部,l的值是null的内存地址,但l和之前的list是不同的。对l的操作不会影响list,但是由于l和list指向的地址是同一个,对l指向的地址的操作,同样会对list起作用。  
查看完整回答
反对 回复 2018-12-09
?
萧十郎

TA贡献1815条经验 获得超13个赞

@彬彬@科比:  实际上,还有一个out,但是和ref不一样。带out的参数可以没有初值,其他和ref一样。 对于引用传和值传两个概念,实际上就是看方法接到的参数是对象本身还是对象的副本。
查看完整回答
反对 回复 2018-12-09
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

增加 out 或 ref 
查看完整回答
反对 回复 2018-12-09
  • 9 回答
  • 0 关注
  • 355 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信