ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

C#コミュのIEnumeratorとListの変換について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
いつもアドバイスありがとうございます。

Object List viewを使っていたのですが、困ったことがあり、質問させていただきます。

現在、Object List Viewで画面に表示している内容をList<クラス名>に戻すことをやっています。

IEnumeratorとして取得できることはわかったのですが、キャストの段階で固ってしまいました。。。

listViewというのがインスタンスだとすると。
List<私が作ったクラス> list = (List<私が作ったクラス>)list.Objects.GetEnumerator();
という記述を行っています。

変換がうまく行かず困っております。

宜しくお願いします。

コメント(7)

変換ではなく、ループで回してListに追加するロジックがシンプルだと思いますが、いかがでしょうか?
http://msdn.microsoft.com/ja-jp/library/6sh2ey19%28v=vs.110%29.aspx
ListはIEnumarableであって、IEnumeratorではないよ。
まったく基本が成ってないから、どこから説明すりゃいいのか、、、見当が付かない。
理解させるのは諦めることにして、とにかくまあ、Enumerator(JavaはIterartorなんだけどなぁ、、、ま、MSなんだからそなんことはどうでもいいか...)を使ったサンプルコードを探して、それを真似して書くことから始めるのが無難では・・・
>List<私が作ったクラス> list = (List<私が作ったクラス>)list.Objects.GetEnumerator();

上記のコードでは、右辺も左辺も両方同じ list を参照していますが、下記の事をしたいのではないのでしょうか? 


if (null != objectListView1.Objects)
{
foreach (Object o in objectListView1.Objects)
{
if(o != null) list.Add((Myclass)o);
}
}
みなさん
ありがとうございました。

たしかに、私の書いた説明が間違っていますね。分かりづらい質問になってしまい申し訳ありません。

アドバイス通り、ダイレクトに変換するのではなく、ループで回して一行ずつ追加する方法で解決いたしました手(チョキ)

いつもアドバイスいただけてありがとうございます。

今後とも宜しくお願いします。
.NET Frameworkが3.5以降なら、
objectListView.Objects.Cast<私が作ったクラス>().ToList()
で済むんですが。

このライブラリはデフォルトは3.5からじゃ使えないのですかね。
ほぅ、[6]なんていうそんな正解があるのか・・・

けれど、、
ObjectListViewは標準のListViewクラスの派生ということなので、標準ListViewの要素をList<T>にする方法を考えてみた。

List<T>にはAddRangeメソッドがある。それはこんなメソッド:

・public void List<T>.AddRange(IEnumerable<T> collection);

IEnumerableなら、一気にこれで要素を追加できる。

これに対して、ListViewにはItemsプロパティがあり、その型は、

・ListView.ListViewItemCollection

このクラスがIEnumerableインタフェースを実装した型であればそのままAddRangeの引数になる。
調べると、次のように宣言されている:

[ListBindableAttribute(false)]
public class ListViewItemCollection : IList, ICollection, IEnumerable

ちゃんといちばん最後にIEnumerableが付いている。この宣言の意味は、
ListViewItemCollectionクラスは、IList, ICollection, IEnumerableのどの型にも見なすことができる、ということなので、

・ListViewItemCollectionはIEnumerableの一種である

ということになる。だから、次の二行でOK。

List<T> myList = new List<T>();
myList.AddRange(listView.Items);

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

C# 更新情報

C#のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング