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

Iはスタッシュの内容を交換したい[A]スタッシュ[B]コードの異なるチャンクで起こるためのみIT1IT2を用い私はbの値にもうアクセスできません。スワップ値

私はC#での経験がほとんどないので、クラスインスタンスの配列をどのように扱うか分かりません。

+0

だからあなたは 'stash'と' it1'と 'it2'を持っていて、あなたは' stash'の中で '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 +をオーバーライドする必要がありますGetHashCodeArray.IndexOfを使用してください。等しい/同じ参照が複数ある場合、これは任意のもの(最初のもの)を置き換えます。

+0

ありがとう、これは私が欲しかったものです。ちょうど明確にする:stashの全ての項目が 'new'キーワードによって生成された場合や、このメソッドでスワップする場合、重複する参照はありませんか? – Colp

+0

@Colp:はい、そうです –