2017-10-10 36 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:是的,没错 –