请问这里的List<string>是全局变量吗?代码如下:
执行如下代码,发现lst里面有内容,感觉奇怪。添加的ls内容是在EditDetail()执行,但离开EditDetail()后ls的内容应该就没了,为何在CreateFile()的FileCreater.WriteFile(sflie, lst)还能调出 lst里面的内容。
private string CreateFile(string sqlFlg)
{
// 声明所需变量
string sflie = null;
List<string> lst = null;
lst = new List<string>();
// 订单头部数据收集
this.EditDetail(lst, sqlFlg);
FileCreater.WriteFile(sflie, lst);
}
private void EditDetail(List<string> ls, string sqlFlg)
{
...........
while (dtReader.Read())
{
ls.Add(dtReader["DETAILDATA"].ToString());
}
}
------解决方案--------------------EditDetail中的参数是全局的lst,不是EditDetail内部的,EditDetail执行完后,lst不会丢失,这是引用传递,不是值传递
------解决方案--------------------这就是事实,是你自己没有理解明白
------解决方案--------------------因为List<T>是引用类型,传递的是变量的引用
------解决方案--------------------List<string> 是在 CreateFile 方法里创建的,EditDetail 只是使用它,往里面添加内容,用完又没删掉当然还在
------解决方案--------------------list是在CreateFile 这个方法中创建的,只要程序执行没有离开CreateFile这个方法,list就一直有值
------解决方案--------------------兄弟你是学C+的吧。C#会自动管理生命周期。
只要你不引用就可能帮你析构
------解决方案--------------------lst是当作形参传过去,然后上里面加内容之后,在CreateFile里面用lst