web-dev-qa-db-ja.com

ListViewアイテムをList <string>にキャストしますか?

どうすればキャストできますかListView.ItemsからList<string>

これは私が試したものです:

List<string> list = lvFiles.Items.Cast<string>().ToList();

しかし、私はこのエラーを受け取りました:

タイプ「System.Windows.Forms.ListViewItem」のオブジェクトをタイプ「System.String」にキャストできません。

14
user2214609

ListViewItemCollectionは、まさにそのように聞こえます-ListViewItem要素のコレクションです。それはnot文字列のコレクションです。このコードがコンパイル時に失敗するのと同じ理由で、コードは実行時に失敗します。

ListViewItem item = lvFiles.Items[0];
string text = (string) item; // Invalid cast!

それぞれがTextListViewItemプロパティから取得される文字列のリストが必要な場合は、次のように簡単に行うことができます。

List<string> list = lvFiles.Items.Cast<ListViewItem>()
                                 .Select(item => item.Text)
                                 .ToList();
33
Jon Skeet

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();
5
p.s.w.g

このようなものを試してください

List<string> list = lvFiles.Items.Cast<ListViewItem>().Select(x=> x.ToString()).ToList();
4

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);
3
Felipe Oriani