2017-06-15 20 views
0

に保存しますushort変数の参照をushort arrayに保存したいので、ushort配列内の値を変更すると変数の値が変更されます。ここで私が達成しようとしていることを明確に示すサンプルコードがあります。 indexValリストの変化はindex1の、INDEX2の値に反映されるように配列内のushortの参照をC#

public void IndexSetter(List<int> indexVal,Rootobject objectVal) 
{ 
    ushort[] refereneArray = new ushort[8] 
    { 
     objectVal.index1, objectVal.index2, 
     objectVal.index3 , objectVal.index4, 
     objectVal.index5, objectVal.index6, 
     objectVal.index7, objectVal.index8 
    }; 
    for(int j = 0; j< indexVal.Count;j++) 
    { 
     refereneArray[j] =(ushort) indexVal[j]; 
    } 
} 

代わりに上記のコードからのような値を格納するのは、私はあなたがでそれを行うことができます

+0

これはできません。 'ushort'は参照型ではなく、値型です。なぜあなたは単に 'Rootobject'への参照を保存しないのですか? (私はそれがクラスだと仮定します) – Adrian

+0

[C#配列の参照]の可能な複製(https://stackoverflow.com/questions/7472278/c-sharp-array-of-references) – GSerg

+0

@adjanありがとうございます。 Rootオブジェクトはクラスです。そして私は参照としてこれらのインデックス値だけを必要とします。リファレンスを設定することは一度もなかったので、私はRootオブジェクトへのリファレンスをどのように格納するのかよく分かりません。あなたは私にこれを行う方法についての洞察を与えることができますか? – Sanga

答えて

0

I'dは(数を除く)まったく同じ名前で8つのインデックスを持たないことをお勧めします。あなたのクラスのすべてのメンバーに、それが何であるかを記述する名前を与えてください。しかし、index6は本当に自明ではありません。

public void IndexSetter(List<int> indexVal, Rootobject objectVal) 
{ 
    for(int i = 0; i < indexVal.Count; i++) 
     objectVal.Indexes[index] = indexVal[i]; 
} 

あるいは短く:次のように

class Rootobject 
{ 
    public int[] Indexes { get; set; } 
} 

は今、あなたはそれらにアクセスすることができます

は、あなたが何ができるか、これはあなたのクラス自体の中に指標の一つの配列を持つことであると述べた

objectVal.Indexes = indexVal.Cast<ushort>().ToArray(); 
+0

ありがとう..それはいいねえ..良い一日を。 :) – Sanga

0

など。参照を格納する必要があります

static unsafe void IndexSetter(IList<ushort> indexVal, Rootobject objectVal) { 
    fixed (ushort* r1 = &objectVal.index1) 
    fixed (ushort* r2 = &objectVal.index2) { 
     ushort*[] refereneArray = {r1, r2}; 
     for (int j = 0; j < indexVal.Count; j++) { 
      *refereneArray[j] = (ushort) indexVal[j]; 
     } 
    } 
} 

実際のアプリケーションでこれを行う必要がありますか?別の話です。あなたの問題を解決する良い方法がある可能性は非常に高いですが、あなたは実際の問題が何であるか教えてくれませんでした。

もパフォーマンスが重要でない場合 - あなたはリフレクションを使用することができます。

static void IndexSetter2(IList<ushort> indexVal, Rootobject objectVal) { 
    int i = 0; 
    foreach (var field in objectVal.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance) 
         .Where(c => c.Name.StartsWith("index") && c.FieldType == typeof(ushort)) 
         .OrderBy(c => c.Name)) { 
     field.SetValue(objectVal, indexVal[i]); 
     i++; 
    } 
} 
+0

コードをありがとう。しかし、私は何の問題もありません。私は、jsonファイル入力に従って動的に生成されるindexValリスト内の値のセットを持っています。 jsonを解析すると、jsonからインデックスの値を取得する必要があります(インデックス値の数は変数です.2または3、または8つすべてになります)。私は、indexValリストから値をとり、それをRootobjectクラスのushortインデックス変数に設定するコードを書く必要があります。これを行う良い方法がありますか? – Sanga

+0

perfomanceが超重視でない場合、RootObjectのフィールドをリフレクションで列挙し、値を直接(配列なしで)設定できます。 – Evk

+0

変数の浅いコピーをするのが好きですか? – Sanga

関連する問題