2013-09-08 5 views
0

목록 및 클래스를 읽는 한, 특정 클래스의 인스턴스 목록이 있고 목록에 .Add()를 추가하면 참조가 추가되어야합니다. 따라서 원래 인스턴스를 수정 한 다음 목록을 통해 액세스하면 수정 된 버전을 가져와야합니다.목록에 추가하면 클래스의 인스턴스가 복사됩니까?

public class Config() 
{ 
    public List<Item> listOfItems = new List<Item>(); 
    public Item item1 = new Item(); 
    public Item item2 = new Item(); 

    ... 
    Config() 
    { 
     listOfItems.Add(item1); 
     listOfItems.Add(item2); 
     ... 
    } 
} 

public class Item 
{ 
    public string name; 

    Item() 
    { 
     name = "Not Set"; 
     ... 
    } 
} 

어딘가에 내 주요 코드에서 내가는 config 클래스의 인스턴스입니다 currentConfig, 사용하십시오 :

currentConfig.item1.name = "A"; 
currentConfig.item2.name = "B"; 

for (int i = 0; i < currentConfig.listOfItems.Count; i++) 
{ 
    DoSomething(currentConfig.listOfItems[i].name); 
} 

하지만 그 수행을 여기

내 코드의 구조 나에게 item1.name 및 item2.name의 현재 값을 제공하지 말고 "설정하지 않음". 내가 도대체 ​​뭘 잘못하고있는 겁니까? 사전에

감사합니다!

내가 문제를 복제 할 수 없습니다
+1

'listOfItems'을 초기화합니까? Item 클래스에'get/set' 메소드가 있습니까? – sarwar026

+2

다른 이름으로 이름을 설정하지 않았습니다. 코드가 누락 되었습니까? – usr

+0

여기서 item1과 item2에 다른 이름을 설정합니까? –

답변

1

...

나는 그 아래는

using System.Collections.Generic; 
using NUnit.Framework; 

namespace ClassLibrary1 
{ 
    [TestFixture] 
    public class Stack1 
    { 
     [Test] 
     public void TestConfigItems() 
     { 
      var currentConfig = new Config(); 

      currentConfig.item1.name = "A"; 
      currentConfig.item2.name = "B"; 

      for (int i = 0; i < currentConfig.listOfItems.Count; i++) 
      { 
       Assert.AreNotEqual("Not Set", currentConfig.listOfItems[i].name); 
       Assert.AreEqual(i == 0 ? "A" : "B", currentConfig.listOfItems[i].name); 
      } 
     } 

     public class Config 
     { 
      public List<Item> listOfItems = new List<Item>(); 
      public Item item1 = new Item(); 
      public Item item2 = new Item(); 

      public Config() 
      { 
       listOfItems.Add(item1); 
       listOfItems.Add(item2); 
      } 
     } 

     public class Item 
     { 
      public string name; 

      public Item() 
      { 
       name = "Not Set"; 
      } 
     } 
    } 
} 
1

내가 다시 쓴 코드를 예상 I didn를 같은 항목이 A와 B 함을 입증 실행하는 경우 네가 본 것을 보지 마라. 모든 것이 정상이며 name 속성이 올바르게 변경되었습니다. 이것은 내가 한 것입니다 :

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     var currentConfig = new Config(); 
     currentConfig.item1.name = "A"; 
     currentConfig.item2.name = "B"; 

     for (var i = 0; i < currentConfig.listOfItems.Count; i++) 
      Console.WriteLine(currentConfig.listOfItems[i].name); 
    } 
} 

public class Config 
{ 
    public Item item1 = new Item(); 
    public Item item2 = new Item(); 
    public List<Item> listOfItems = new List<Item>(); 

    public Config() 
    { 
     this.listOfItems.Add(this.item1); 
     this.listOfItems.Add(this.item2); 
    } 
} 

public class Item 
{ 
    public string name; 

    public Item() 
    { 
     this.name = "Not Set"; 
    } 
} 
+0

this.listOfItems.Add (this.item1)에서 "this"를 왜 사용했는지 곧 설명해주십시오. 차이가 있습니까? – Epikur

+0

@Epikur 'this'는 클래스의 인스턴스를 참조합니다. 추가 할 필요는 없지만 일부 사람들은이를 명확하게하기 위해 사용하는 것을 선호합니다. http://msdn.microsoft.com/en-us/library/dk1507sz.aspx –

관련 문제