質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

405閲覧

(配列とレジストリ編集)配列に代入した後、その配列を使ってもう一度繰り返し処理するとコンパイルエラーが起きる

mercurian-teto

総合スコア75

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/11/02 09:16

編集2017/11/03 05:17

1.下の画像にある[0]~[3]のレジストリの値を読み込み

2.プログラムを5分間待機させている間に
[0]~[3]のデータを手動で消し

3.1で読み込んだ値を利用して
再度[0]~[3]のレジストリを復活させる

というプログラムを作ろうと思っています。

レジストリを編集するコードはこのサイトを参考にしました。

イメージ説明

レジストリを手動で編集した場合なにも異変は起きませんでした。

コードの詳細です

まず、listcountの値と[0]~[3]の値を読み込みます

C#

1 //タイトル 2 Console.Title = "aを変更する"; 3 4 5 6 7 //確認メッセージ 8 9 DialogResult result = MessageBox.Show("aを変更します", 10 "aを変更する", MessageBoxButtons.OKCancel); 11 12 13 14 15 // OKボタンがクリックされた時の処理 16 if (result == DialogResult.OK) 17 { 18 //listcountを読み込む 19 Microsoft.Win32.RegistryKey regkey0 = 20 Microsoft.Win32.Registry.CurrentUser.OpenSubKey 21 (@"HKEY_CURRENT_USER\Software\a", false); 22 //キーが存在しないときは null が返される 23 if (regkey0 == null) return; 24 string list = (string)regkey0.GetValue("listcount"); 25 regkey0.Close(); 26 27 28 29 30 31 //[0]~[3]を読みこむ 32 Microsoft.Win32.RegistryKey regkey = 33 Microsoft.Win32.Registry.CurrentUser.OpenSubKey 34 (@"Software\a", false); 35 //キーが存在しないときは null が返される 36 37 string[] array = { }; 38 int countlist = int.Parse(list); 39 for (int i = 0; i <= countlist - 1; i++) 40 { 41 if (regkey == null) return; 42 string[] aaray = array.Concat 43 (new string[] { (string)regkey.GetValue("[" + i + "]") }). 44 ToArray(); 45 } 46 //閉じる 47 regkey.Close();

つぎにプログラムを待機させます

C#

1//5分待機する 2 for (int i = 300; 0 <= i; i--) 3 { 4 Console.CursorLeft = 0; 5 Console.Write("しばらくお待ちください:{0:D3}", i); 6 Thread.Sleep(1000); 7 } 8

この間にレジストリの値を削除します
イメージ説明
イメージ説明

読み込んだ値を代入して元通りにしようと考えていました。

C#

1 2 //読み込んだ[0]~[3]の項目を再度追加する 3 Microsoft.Win32.RegistryKey regkeyd = 4 Microsoft.Win32.Registry.CurrentUser.OpenSubKey 5 (@"Software\a", false); 6 if (regkeyd == null) return; 7 Microsoft.Win32.RegistryKey regkeya = 8 Microsoft.Win32.Registry.CurrentUser.CreateSubKey 9 (@"Software\a"); 10 11 12 for (int j = 0; j <= aarray.Length; j++) 13 { 14 regkeya.SetValue("[" + j + "]", aarray[j]); 15 } 16 regkeya.Close(); 17 18 19 20 21 22 //処理完了のメッセージを表示する 23 24 DialogResult resulta = MessageBox.Show("処理が完了しました");

このコードまでたどり着いて下の画像のようになることが理想だったのですが、イメージ説明

最後の3つ目のコードにおいてエラーが起きました。

C#

1 for (int j = 0; j <= aarray.Length; j++) 2 { 3 regkeya.SetValue("[" + j + "]", aarray[j]); 4 }

この部分に対して
現在のコンテキストにaarrayという名前は存在しません
というエラー画面が2連続出てきました。
aarrayは普通に存在しているのにもかかわらずこのようなエラーが出てくるのが全く理解できません。
回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/11/02 09:27

配列じゃ駄目なのですか?
kiichi54321

2017/11/02 09:27

すごく読みづらいので、ソースコードの整形をしてもらえませんか?あと、はじめの「int countlist = 4」の末尾に「;」がないのは気のせいですか?
mercurian-teto

2017/11/03 02:12 編集

閲覧ありがとうございます。配列にする方法に変えました。それでグダグダだった質問文は丸ごと変更いたしました。
guest

回答2

0

C# ですよね? アップされていたコードの、

"rejireji"+i.ToString() = (string)regkey.GetValue("["+i+"]");

は C# として文法的に NG だと思うのですが、いかがですか?

投稿2017/11/02 09:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

for (int i = 0; i <= countlist - 1; i++) { if (regkey == null) return; string[] aaray = array.Concat (new string[] { (string)regkey.GetValue("[" + i + "]") }). ToArray(); }

C#の文法上、for文の中で宣言された変数は、for文の中でしか存在しえません。変数のスコープってやつですね。
そのため、aarayは存在しません。 
aaray を for文の外で、宣言してください。
あと、タイプミスのような、紛らわしい名前を付けてはいけないww

投稿2017/11/03 03:48

編集2017/11/03 03:50
kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mercurian-teto

2017/11/03 06:51

回答ありがとうございます。 ループ文章に入る前にstring[] aarayを初期化すればよかったのですね。 エラーが取れました! しかし、デバグして実行してメッセージボックスをOKとするとなぜか なにも実行されずにエラー画面も出ないまま無言で終了します。 原因を今、探しているのですが、 また何か質問があったら是非回答お願いします。
mercurian-teto

2017/11/03 07:30

新たなエラーについては質問内容が大きく変わってしまうのでいったん締め切らせていただきます。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問