forとforeach
C#はreadonly。
C#,Java両方とも変更が反映される。
しらなんだ。
// C# class X { public String hoge; } [Test] public void TestForeach() { List<X> l = new List<X>(); l.Add(new X()); foreach (X x in l) { x.hoge = "hoge"; } Assert.AreEqual("hoge", l[0].hoge); foreach (X x in l) { // コンパイルエラーになる // x = new X(); x.hoge = "hoge"; } Assert.AreEqual("hoge", l[0].hoge); }
// java class X { public String hoge; } public class ForTest extends TestCase { public void test() { List<X> l = new ArrayList<X>(); l.add(new X()); for(X x : l) { x.hoge = "hoge"; } assertEquals("hoge", l.get(0).hoge); } public void test2() { List<X> l = new ArrayList<X>(); l.add(new X()); for(X x : l) { x = new X(); x.hoge = "hoge"; } assertNull(l.get(0).hoge); } }