为什么执行完set方法后.list还是为null
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<string> list = null;
private void button1_Click(object sender, EventArgs e)
{
set(list);
}
private void set(List<string> l)
{
l = new List<string>();
}
}
List<string> list 虽然为引用类型,但是对应的对象不存在,也就是说系统肯本就还没有为它在堆上分配内存,在栈上也无其对应的引用。所以当为null的 List<string> list 做为参数实际上是穿了一个空,方法自己会为参数 l 创建一个临时变量。
这是一定的 , set 只是创建 I
list = l=null
然后set 后 l 指向了其他的内存
list 还是老样子 null
你没 out或ref 。。
增加 out 或 ref 吧
上面的各位都是对的。
稍微补充一下:在C#里,方法的参数有引用传和值传两种。只有加了ref的才是引用传。值传时方法内部使用参数的副本,引用传世使用参数的引用。在你的代码里,set()方法的参数实际上传了list 变量的值,即指向null的内存地址(可以这样理解,实际上是一个包装过的指针),set()方法内部,l的值是null的内存地址,但l和之前的list是不同的。对l的操作不会影响list,但是由于l和list指向的地址是同一个,对l指向的地址的操作,同样会对list起作用。
只有加了ref的才是引用传???大哥你没搞错吧。。。!!!
@彬彬@科比:
实际上,还有一个out,但是和ref不一样。带out的参数可以没有初值,其他和ref一样。
对于引用传和值传两个概念,实际上就是看方法接到的参数是对象本身还是对象的副本。
增加 out 或 ref