2016-05-18 10 views
0

2つのオブジェクト配列があり、もう一方にオブジェクトを追加したいと思います。これは簡単だが、何も動作していないようだ。ここに私が今何をしようとしているのです。C#で2つのオブジェクト配列を追加する

Module[] StaticModules; 
Module[] DynamicModules; 

Info = Database.Devices[inx]; 
//Modules = Database.GetDeviceModules(Info); 

StaticModules = Database.GetDeviceModules(Info); 
DynamicModules = Database.GetDeviceModules(new int[] { 23, 24, 25, 26, 27, 28, 29, 30 }); 

Array.Resize(ref StaticModules, StaticModules.Length + DynamicModules.Length); 
Array.Copy(StaticModules, DynamicModules, DynamicModules.Length); 

Modules = StaticModules; 

永遠にかかると思われるコピーが何かをしているように見えるまでは、すべてが大丈夫です。ある時点で私はウォッチウィンドウを開いて、コピー後にすべてのバールが赤くなり、最後の機能がタイムアウトしたためにリフレッシュしなければならないというメッセージが表示されました。

+1

コピーへの最初のパラメータは、ソースである必要があり、あなたのサイズ変更コールは、あなたがそれが先だと思う示唆しています。 – muratgu

+0

'DynamicModules'の値を' StaticModules'にコピーしようとしていますが、それは正しいですか? –

+0

配列を使用するか、 'List'のようなより動的な構造を使用できますか? –

答えて

1

Array.Copyメソッドにはいくつかのオーバーロードがあります。この1つを使用する必要がありますArray.Copy。あなたが選んだオーバーロードは、フォームインデックス番号0で始まる項目をペーストするときに、コピー先配列の要素を上書きします。また、@muratguと同じように、最初の引数はソース配列です。

Module[] StaticModules; 
    Module[] DynamicModules; 

    Info = Database.Devices[inx]; 
    //Modules = Database.GetDeviceModules(Info); 

    StaticModules = Database.GetDeviceModules(Info); 
    var len = StaticModules.Length; 

    DynamicModules = Database.GetDeviceModules(new int[] { 23, 24, 25, 26, 27, 28, 29, 30 }); 



    Array.Resize(ref StaticModules, StaticModules.Length + DynamicModules.Length); 
    Array.Copy(DynamicModules, 0, StaticModules, len, DynamicModules.Length); 

    Modules = StaticModules; 
3

コードが複雑すぎるようです。どうすればいいですか:

Modules = StaticModules.Concat(DynamicModules).ToArray(); 
+0

私はconcatルートを試みましたが、私はどちらかを動作させることができませんでした。私はあなたがここで何を提案しようとします。私はModules.Concat(DynamicModules)を行っていて、変更が見られないと思います。 – lusher00

+0

うん、もっと簡単な@メタナイト。まだ勉強してる – lusher00

1

これにCopyToを使用できます。

Module[] StaticModules; 
Module[] DynamicModules; 
Module[] FinalModules = new Module[StaticModules.Length + DynamicModules.Length]; 

StaticModules.CopyTo(FinalModules, 0); 
DynamicModules.CopyTo(FinalModules, StaticModules.Length); 
0

これはうまくいくはずです。私は結果を見るためにコンパイラで試しました。

Array.Copy(DynamicModules, 0, StaticModules, DynamicModules.Length, DynamicModules.Length); 

全コード:

Module[] StaticModules; 
Module[] DynamicModules; 

Info = Database.Devices[inx]; 
//Modules = Database.GetDeviceModules(Info); 

StaticModules = Database.GetDeviceModules(Info); 
DynamicModules = Database.GetDeviceModules(new int[] { 23, 24, 25, 26, 27, 28, 29, 30 }); 

Array.Resize(ref StaticModules, StaticModules.Length + DynamicModules.Length); 
Array.Copy(DynamicModules, 0, StaticModules, DynamicModules.Length, DynamicModules.Length); 

Modules = StaticModules; 
関連する問題