【问题标题】:Swap values in array of class instances交换类实例数组中的值
【发布时间】:2017-10-10 11:46:39
【问题描述】:
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];

我想只使用 it1it2 交换 stash[a]stash[b] 的内容strong> 因为发生在我无法再访问 ab 值的不同代码块中。

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

【问题讨论】:

  • 所以你有stashit1it2 并且你想在stash 中交换it1it2
  • 你不能交换你不知道的东西,在这种情况下你不知道索引
  • @Chris 是的,这就是我想做的。

标签: c# arrays class instance


【解决方案1】:

你不能交换你不知道的东西,在这种情况下你不知道索引。

但是如果你有两个实例,你可以搜索索引:

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。如果您有多个相等/相同的引用,这将替换任意(第一个)。

【讨论】:

  • 谢谢,这就是我想要的。澄清一下:如果 stash 中的所有项目都是由 new 关键字生成和/或通过这种方法交换的,那么不应该有任何重复的引用,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多