どうすればキャストできますかListView.Items
からList<string>
?
これは私が試したものです:
List<string> list = lvFiles.Items.Cast<string>().ToList();
しかし、私はこのエラーを受け取りました:
タイプ「System.Windows.Forms.ListViewItem」のオブジェクトをタイプ「System.String」にキャストできません。
ListViewItemCollection
は、まさにそのように聞こえます-ListViewItem
要素のコレクションです。それはnot文字列のコレクションです。このコードがコンパイル時に失敗するのと同じ理由で、コードは実行時に失敗します。
ListViewItem item = lvFiles.Items[0];
string text = (string) item; // Invalid cast!
それぞれがText
のListViewItem
プロパティから取得される文字列のリストが必要な場合は、次のように簡単に行うことができます。
List<string> list = lvFiles.Items.Cast<ListViewItem>()
.Select(item => item.Text)
.ToList();
Cast
メソッドは、基本的にボックス化/ボックス化解除を実行しようとするため、リスト内の項目がまだ文字列でない場合は失敗します。代わりにこれを試してください:
List<string> list = lvFiles.Items.Cast<ListViewItem>()
.Select(x => x.ToString()).ToList();
またはこれ
List<string> list = lvFiles.Items.Cast<ListViewItem>()
.Select(x => x.Text).ToList();
このようなものを試してください
List<string> list = lvFiles.Items.Cast<ListViewItem>().Select(x=> x.ToString()).ToList();
Select
メソッドを使用してこれを試してください。
リストテキストの場合:
List<string> listText = lvFiles.Items.Select(item => item.Text).ToList();
リスト値の場合:
List<string> listValues = lvFiles.Items.Select(item => item.Value).ToList();
または多分、両方のために:
Dictionary<string, string> files = lvFiles.Items.ToDictionary(key => key.Value, item => item.Text);