質問するログイン新規登録

回答編集履歴

1

訂正

2017/06/28 14:20

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,33 @@
1
1
  何故 List<string> 型を使っているのか分かりませんが、Cfile = ofd.FileNames; というようなことはできないのはエラーメッセージの通りなのですが・・・
2
2
 
3
- public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = new List<string>(); とすべきと思いますが、そうできない事情がありますか?
3
+ public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = new List<string>(); とすべきと思いますが、そうできない事情がありますか?
4
+
5
+ 【訂正】
6
+
7
+ コメント欄に書きましたが、すみません、上記は間違いでした。
8
+
9
+ 誤:public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = new List<string>();
10
+
11
+ 正:public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = ofd.FileNames;
12
+
13
+ でした。
14
+
15
+ 質問者さんの最初の方のコメントに対してレスします。
16
+
17
+ > 理由は配列を初期化する際に 配列名[値] 値を入れないといけないと思うのですが、その値が決まらない場合
18
+
19
+ FileDialog.FileNames プロパティは String 型の配列のオブジェクト(インスタンス)を作って、それへの参照を返します。つまり、質問者さんが気にしている「配列の初期化」は FileDialog.FileNames プロパティの中で行われます。
20
+
21
+ なので、質問者さんが行う必要があるのは、FileDialog.FileNames プロパティが返す String 型の配列のオブジェクトへの参照を保持する変数を宣言することだけで、それが string[] Cfile です。
22
+
23
+ つまり、
24
+
25
+ string[] Cfile = ofd.FileNames;
26
+
27
+ は、質問者さんが宣言した変数 Cfile に、.NET Framework のライブラリが ofd.FileNames によって生成した String 型の配列のオブジェクトへの参照を代入していることになります。(値型と参照型の違いに注意してください。今回は参照型の話です)
28
+
29
+ あとは、Cfile[0], Cfile[1] ... とか、foreach (string filename in Cfile) とかで各要素を取得できます。
30
+
31
+ > ファイルがもしあとから追加された場合困ります
32
+
33
+ その場合は、その後でもう一度 ofd.FileNames として追加されたファイルの名前を含めて String 型の配列のオブジェクトを取得できます。