日期:2014-05-18  浏览次数:20888 次

请问这里的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