2017-10-10 67 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]; 

我想交換藏匿的內容並[a]藏匿並[b]僅使用IT1IT2因爲在不同的組塊的代碼發生在那裏我沒有訪問ab值。交換值

我幾乎沒有C#的經驗,所以我很難理解它如何處理類實例的數組。

+0

所以你有'藏'和'it1'和'it2',你想在'藏'周圍交換'it1'和'it2'嗎? – 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 + GetHashCode並使用Array.IndexOf。如果你有多個相同/相同的引用,這將取代任意(第一個)。

+0

謝謝,這是我想要的。只是爲了澄清:如果隱藏的所有項目都是由'new'關鍵詞生成的和/或通過這種方法交換,那麼不應該有任何重複的引用,對吧? – Colp

+0

@Colp:是的,沒錯 –