配列 Cfile はいくつ配列ができるかわからないので、public List<string> Cfile = new List<string>(); と宣言&初期化を行いました。
そして、このサイトで紹介されている方法でファイルのパスを配列で所得したのをグローバル変数である Cfile に代入(Cfile = ofd.FileNames;)しようとしたところ、 型 'string[]' を 'System.Collections.Generic.List<string>' に暗黙的に変換できませんというエラーに出会いました。
これをネットで検索してみると、他の型の事例が出てたんですが、理解できませんでした。
解決策と説明していただけないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答2件
0
List<T>.AddRange メソッドを使えばいいのでは?
投稿2017/06/28 14:02
総合スコア10702
0
ベストアンサー
何故 List<string> 型を使っているのか分かりませんが、Cfile = ofd.FileNames; というようなことはできないのはエラーメッセージの通りなのですが・・・
public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = new List<string>(); とすべきと思いますが、そうできない事情がありますか?
【訂正】
コメント欄に書きましたが、すみません、上記は間違いでした。
誤:public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = new List<string>();
正:public List<string> Cfile = new List<string>(); は削除して、string[] Cfile = ofd.FileNames;
でした。
質問者さんの最初の方のコメントに対してレスします。
理由は配列を初期化する際に 配列名[値] 値を入れないといけないと思うのですが、その値が決まらない場合
FileDialog.FileNames プロパティは String 型の配列のオブジェクト(インスタンス)を作って、それへの参照を返します。つまり、質問者さんが気にしている「配列の初期化」は FileDialog.FileNames プロパティの中で行われます。
なので、質問者さんが行う必要があるのは、FileDialog.FileNames プロパティが返す String 型の配列のオブジェクトへの参照を保持する変数を宣言することだけで、それが string[] Cfile です。
つまり、
string[] Cfile = ofd.FileNames;
は、質問者さんが宣言した変数 Cfile に、.NET Framework のライブラリが ofd.FileNames によって生成した String 型の配列のオブジェクトへの参照を代入していることになります。(値型と参照型の違いに注意してください。今回は参照型の話です)
あとは、Cfile[0], Cfile[1] ... とか、foreach (string filename in Cfile) とかで各要素を取得できます。
ファイルがもしあとから追加された場合困ります
その場合は、その後でもう一度 ofd.FileNames として追加されたファイルの名前を含めて String 型の配列のオブジェクトを取得できます。
投稿2017/06/28 13:22
編集2017/06/28 14:20退会済みユーザー
総合スコア0
退会済みユーザー
2017/06/28 13:49
退会済みユーザー
2017/06/28 14:28
退会済みユーザー
2017/06/28 14:39
2017/06/28 15:08
2017/06/29 05:38
退会済みユーザー
2017/06/29 09:11 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
2017/06/28 14:26