代码之家  ›  专栏  ›  技术社区  ›  Zedd

交换类实例数组中的值

  •  2
  • Zedd  · 技术社区  · 7 年前
    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];
    

    我想交换的内容 藏匿 隐藏[b] 仅使用 it1 因为发生在我无法访问的另一段代码中 b 价值观不再存在。

    我对C几乎没有经验,所以我很难理解它如何处理类实例数组。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Tim Schmelter    7 年前

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

    但如果两个实例都有,则可以搜索索引:

    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