2017-10-10 1 views
2
public class Item{ some variables and methods } 
public Item[] stash = new Item[50]; 

stash[a] = new Item(); 
stash[a].somevar = somevalue; 
public Item it1 = stash[a]; 

stash[b] = new Item(); 
stash[b].somevar = someothervalue; 
public Item it2 = stash[b]; 

I은 ​​숨김 컨텐츠를 교환하고자 [A]숨김 [B] 부호의 다른 청크에서 발생하기 때문 만 IT1IT2를 사용 어디에 내가 b 값에 더 이상 액세스 할 수 없습니다.스왑 값

저는 C#에 대한 경험이 거의 없으므로 클래스 인스턴스 배열을 처리하는 방법을 이해하는 데 어려움을 겪고 있습니다.

+0

그래서'stash'와'it1'과'it2'가 있고'it1'과'it2'를'stash'에서 바꿔주고 싶습니까? – Chris

+0

당신이 모르는 것을 바꿀 수는 없습니다.이 경우에는 인덱스를 모릅니다. –

+0

@Chris 예, 저도하고 싶습니다. – Colp

답변

3

모르는 것을 바꿀 수 없으며,이 경우 색인을 알 수 없습니다.

하지만 두 인스턴스가있는 경우에는 인덱스를 검색 할 수 있습니다 :

int indexOfIt1 = Array.FindIndex(stash, i => object.ReferenceEquals(i, it1)); 
int indexOfIt2 = Array.FindIndex(stash, i => object.ReferenceEquals(i, it2)); 
stash[indexOfIt2] = it1; 
stash[indexOfIt1] = it2; 

이 검사를 모두 동일한 참조하면 그들은 단지 동일 (그래서 동일한 속성 값)이있는 경우 Equals를 오버라이드 (override), + GetHashCode이고 Array.IndexOf을 사용하십시오. 동일한/동일한 참조가 여러 개 있으면 임의의 (첫 번째) 대체됩니다.

+0

고마워,이게 내가 원했던거야. 그냥 명확히하기 위해서 : stash의 모든 항목이'new' 키워드로 생성되거나이 방법으로 스와핑하면 어떤 중복 참조도 있어서는 안됩니다, 맞습니까? – Colp

+0

@Colp : 네, 맞아요. –