2014-02-07 4 views
0

과제에 대한 질문이 있습니다.목록의 인스턴스 참조 변경

public class A {} 

public class AHolder 
{ 
    public A AnInstance; 
} 


void Change() 
{ 
A anotherInstance=new A(); 
anotherInstance.aField="bla"; 
A anotherInstance2=new A(); 
anotherInstance2.aField="blabla"; 
List<AHolder> aList= new List<AHolder>(); 
aList.add(new AHolder(){AnInstance=anotherInstance}); 
aList.add(new AHolder(){AnInstance=anotherInstance}); 
aList.add(new AHolder(){AnInstance=anotherInstance}); 
anotherInstance=anotherInstance2; 

} 

어떻게 anotherInstance 루프를 사용하지 않고 변경하는 경우, aList의 모든 AnInstance 값의 변화를 보장하는 코드를 구현 할 수 있습니까?

업데이트 : 위 코드 줄을 실행 한 후 aList [0] .AnInstance.aField.Is에서 "blabla"값을 가져 오려고합니다.

+0

당신은 할 수 없습니다. 그 이유는 실제로 * 로컬 변수의 값을 변경하는 것입니다 *; 당신의'AHolder' 인스턴스는 지역 변수에 대해 아무것도 모른다. 그들은 당신이 그들에게 하나의 인스턴스를 전달했음을 알고 있지만 당신이 그것을 어디에서 얻었는지 상관하지 않습니다. 해결하려는 특정 시도가 아니라 해결하려는 문제를 설명하십시오. – Jon

답변

0

AHolder 인스턴스를 직접 참조하는 대신 래퍼 클래스 인스턴스를 사용하여이 작업을 수행 할 수 있지만이 간접적 인 계층이 실제로 필요한 경우 코드가 읽기 쉽게됩니다.

나는 다음과 같은 샘플을 수행하는 방법에 대해 설명 기대 :

public class MyData { public string Value; } 
public class MyRef { public MyData Instance; } 

void Change() 
{ 
var dataFoo = new MyData() { Value = "foo" } 
var dataBar = new MyData() { Value = "bar" } 
var referer = new MyRef() { Instance = dataFoo } 

var list= new List<MyRef>(); 
list.add(referer); 
list.add(referer); 
list.add(referer); 
// for i=0 to 2 -> list[i].Instance.Value = "foo" 

referer.Instance = dataBar; 
// for i=0 to 2 -> list[i].Instance.Value = "bar" 
} 
+0

나는 위의 질문을 해결할 것이라고 생각합니다. 감사합니다. 하지만 문제를 명확히 설명 할 수는 없지. 질문에 덧붙여, MyRef 수업에서 나는 3 개의 다른 소품이 필요하며 2 개의 소품은 전체 목록에서 동일해야합니다. 이 경우? – user3283251

+0

나는 그것이 가능하지 않다는 것을 말하지 않겠다. (즉, 일반적인 값을 위해 정적 속성을 사용할 수있다.)하지만 설명했던 제약 조건은 내가 당신이 모순 된 모델로 고민하고 있다고 생각하게한다. –