修改foreach循环中的集合

时间:2013-10-02 17:45:54

标签: c# reference pass-by-reference

快速提问:

public void ChangeObject(MyClass a){
  a.property = 55;
}

public void Test(){
  List<MyClass> obj_list = get_the_list();
  foreach( MyClass obj in obj_list )
  {
      ChangeObject(obj);
  }
}

这会使obj_list中的所有值都具有属性55吗?

所以我的代码中的其他地方我会调用“if(obj_list [5] .property == 55){print(”YES“);}”在循环之后会是真的。

或者我需要“参考”?因为如果你尝试使用ref会产生很多错误(因为你无法修改迭代值)。

1 个答案:

答案 0 :(得分:3)

  

这会使obj_list中的所有值都具有属性55吗?

是的 - 假设MyClass确实是一个班级。想象一下,列表实际上是一个地址簿 - 每个页面上都有一个房子的地址(元素)。该列表不包含实际房屋本身 - 只是一种获取它们的方式。你的foreach循环就像是说:“对于书中的每一页,请到页面上列出地址并在前门写55的房子。”

  

或者我需要“参考”?

没有。这将尝试通过引用传递变量 ...并且迭代变量是只读的。有关详细信息,请参阅我在parameter passing in C#上的文章。