C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 87 を表示中)
■51804 / )  Re[1]: objectの内容が勝手に変わってしまいます
□投稿者/ よねKEN (547回)-(2010/07/20(Tue) 17:16:01)
よねKEN さんの Web サイト
> でDBFを使うとAAAOLDの中身がPM20OLDにOJをコピーするとPM20OLDの中身と同じになってしまいます。
> AAAOLDの中身とPM20OLDは別のものでなければなりません。
> どうしたら回避できるでしょうか?ご教授お願いいたします。

「AAAOLD = MKST.OJ;」というコードは、配列の要素のコピーではなく、配列の参照のコピーです。
AAAOLDとMKST.OJが指す配列は同じ配列です。

配列は参照型ですので、たとえば整数を代入するようにはなりません。
参照型と値型の違いについて調べてみてください。

現状のコードで最小限の修正で済ませるなら、以下の2つの方法が考えられます。

(1) DBFメソッドの先頭で 「MKST.OJ = new Object[200];」と書いてOJの配列インスタンスを初期化する
(2) 「AAAOLD = MKST.OJ;」の部分をArray.Copyメソッドを使った配列のコピー処理に書き換える

上記のどちらも応急処置的な方法であり、まったくお勧めではありません。

根本的な対応としては、DBFメソッドでグローバルな配列に結果をセットするのではなく、
そもそも結果の配列自体を返せばよいと思います。

今は、処理結果の成否を0 or 1で返しているようですが、
この戻り値として配列を返せばよい、という意味です。
処理が失敗したときはnullを返すようにすれば成否の判断もできます。

あるいはどうしても成否を表すステータスを戻り値として返したいなら、
最終のパラメータに配列インスタンスを受け取るパラメータを用意し、
その配列に対して各要素をセットすればよいです。


返信 編集キー/


管理者用

- Child Tree -