2013-07-29 9 views
10

ListView.ItemsList<string>にキャストするにはどうすればよいですか?キャストリスト表示アイテムリスト<string>?

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

が、私はこのエラーを受け取っ:

この

は私が試したものです

Unable to cast object of type 'System.Windows.Forms.ListViewItem' to type 'System.String'.

答えて

28

ListViewItemCollectionのようなものを試してみて、それはのように聞こえる、まさにです - ListViewItem要素のコレクション。それはではなく、の文字列のコレクションです。あなたのコードは、このコードはコンパイル時に失敗するだろうと同じ理由で実行時に失敗します。

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

あなたがListViewItemTextプロパティから取得されたそれぞれの文字列のリストをしたい場合は、あなたが行うことができますその簡単に:リストテキストに

List<string> list = lvFiles.Items.Cast<ListViewItem>() 
           .Select(item => item.Text) 
           .ToList(); 
+0

なぜ私は全体のパスの代わりにファイル名しか見ることができませんか? – user2214609

+2

@ user2214609: 'ListView'にファイル名が含まれていることさえ知らなかったので、私は考えていません。別の質問としてそれを聞かなければならないように聞こえるように聞こえるように聞こえるように思えます - ファイル名で設定された 'ListViewItem'の' Text'プロパティの内容は 'ListViewItem'値のコレクションを'リスト ' –

+0

キャストやLINQ機能がまったくない場合はどうすればよいですか? (WinFormプロジェクト) –

5

Cast方法は、基本的にボックス/ VHS版を実行しようとしますので、それはアイテムの場合に失敗します。リスト内の文字列はまだ文字列ではありません。代わりにこれを試してみてください:

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

またはこの

List<string> list = lvFiles.Items.Cast<ListViewItem>() 
           .Select(x => x.Text).ToList(); 
+0

はあなたの最初の例は、あなたのすべての要素が文字列「のSystem.Windows.Formsあるリストを与えることはありません。 ListViewItem "? –

+0

ListViewItem:{テキストはここにあります} – Blorgbeard

+0

@AdamV ListViewItem.ToStringが返すものが私の頭の上から分かりません。 'ListViewItem'は[ToString'をオーバーライドする](http://msdn.microsoft.com/en-us/library/9syath98.aspx)なので、ちょうどそれが自分の型名を返す以上のことをすると思います。 –

4

この

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

@Downvoterはコメントを忘れないでください –

3

Selectメソッドを使用して、これを試してみてください

リストの値について

List<string> listValues = lvFiles.Items.Select(item => item.Value).ToList(); 

それとも、両方のために:

Dictionary<string, string> files = lvFiles.Items.ToDictionary(key => key.Value, item => item.Text); 
関連する問題