- - PR -
配列のデータを変更したい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-07 20:20
C#で開発しています。
社員情報を格納したクラスをArrayList配列に格納し、 あとでそのクラスの中身を変更する処理を作ってますが、 クラスの中身を変更しても中身が変更されません。 一度入れた中身を変更することは、できないのでしょうか? // ArrayListに格納するクラス public class MyEmp { public string EmpNo; public string EmpName; } static ArrayList AryEmpInfo = new ArrayList(); // ArrayList 配列への格納方法 MyEmp classEmp = new MyEmp(); classEmp.EmpNo = "123"; classEmp.EmpName = "太郎"; AryEmpInfo.Add(classEmp); // ArrayList 配列の中身の変更の仕方 foreach (MyEmp My in AryEmpInfo) { My.EmpNo = "456"; My.EmpName = "次郎"; } | ||||||||
|
投稿日時: 2005-07-07 21:41
とヘルプにあるので、foreach ステートメントで内容の変更はやめたほうがいいのでは?forステートメントで行えばよろしいと思います。
| ||||||||
|
投稿日時: 2005-07-08 10:05
foreachで内容の変更をしてはいけないというのは、コレクション(今回はAryEmpInfo)の内容を変更してはいけない(コレクションから項目を削除とか)ということで、コレクションに参照されているインスタンスの値を変えてはいけないということではないと思います。
ちなみに村長さんのソースを動かしたら、正しく更新されました。 私はAryEmpInfoがstaticなのが気になりますネ。 foreachを実行した直後にブレークポイントを付けてAryEmpInfoの値を確認してみてください。 | ||||||||
|
投稿日時: 2005-07-08 11:10
souさん、一郎さん、レスありがとうございます。
朝一のリフレッシュした状態で再度デバックして調査したところ、 配列内の値が変更できないのではなく、違うことが原因であったことが わかりました。 原因ですが、 画面の構成を動的に生成する画面を作っており、あるボタンを押下すると 別画面に遷移したかのように、画面の構成を変更する仕様です。 ボタンイベント前に必ずポストバックが行われることを忘れており、Page_Loadにて 再度コントロールを追加する処理を行っていなかったため、ボタンイベント処理時に 値を取得するコントロールが画面から無くなっていたことが原因でした。 ご教示ありがとうございました。 |
1