在类实例数组中交换值

时间:2017-10-10 11:46:40

标签: c# arrays class instance

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];

我想仅使用 it1 it2 藏匿[a] 藏匿[b] 的内容strong>因为发生在不同的代码块中,我无法再访问 a b 值。

我对C#没什么经验,所以我很难理解它如何处理类实例数组。

1 个答案:

答案 0 :(得分: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并使用{{1} }。如果你有多个相等/相同的引用,这将替换任意(第一个)。