LINQ講座第2回のサンプルがうまく動きません

タグの編集
投稿者 トマト  (小学生) 投稿日時 2009/8/25 04:09:39
またお邪魔します。
LINQ講座第2回のサンプルがうまく動きません。
Dim animals = New String() {"アメンボ""イノシシ""ウマ""エリマキトカゲ""オオカミ"}
Dim query = From animal In animals Select animal.Length '←変数の名前が違う・・・。 
ListBox1.Items.AddRange(query.Cast(Of String).ToArray) '←ここでInvalidCastExceptionが発生します。 

"型 'System.Int32' のオブジェクトを型 'System.String' にキャストできません。"が表示されて止まってしまいます。
投稿者 あにす  (社会人) 投稿日時 2009/8/25 06:59:58
IntegerからStringにキャストが出来ないんですね。
IntegerからObjectにはキャスト出来て、ListBoxはToString()した値を表示するのでこんな感じで動きますね。

Dim animals = New String() {"アメンボ""イノシシ""ウマ""エリマキトカゲ""オオカミ"}
Dim results = From animal In animals Select animal.Length       ListBox1.Items.AddRange(results.Cast(Of Object).ToArray())


最初は下記コードでいいんじゃ?と思ったら、Object型の引数にInteger型のオブジェクトは指定出来てもObject()型の引数にInteger()型のオブジェクトは指定出来ないんですね。

Dim animals = New String() {"アメンボ""イノシシ""ウマ""エリマキトカゲ""オオカミ"}
Dim results = From animal In animals Select animal.Length
ListBox1.Items.AddRange(results.ToArray())

投稿者 あにす  (社会人) 投稿日時 2009/8/25 07:02:00
コピペに失敗したようで上のコードに改行が入ってませんでした…。
Dim animals = New String() {"アメンボ""イノシシ""ウマ""エリマキトカゲ""オオカミ"}
Dim results = From animal In animals Select animal.Length
ListBox1.Items.AddRange(results.Cast(Of Object).ToArray())
投稿者 るきお  (社会人) 投稿日時 2009/8/25 22:07:36
こんにちは。

お知らせありがとうございます。
確かに動かないです。何で動かないコードが記事の中にまぎれてしまったのか首をひねってしまいますが…。

近日中に改修します。
ご迷惑をおかけしました。

該当箇所は説明の便宜上、前で紹介したコードをできるだけ変えないようにしながら、新しい説明項目を追加していくというスタンスになっています。
今、頭の中にある改修案は次のようなものです。(今環境がないので試めしてはいません)。
Dim animals = New String() {"アメンボ""イノシシ""ウマ""エリマキトカゲ""オオカミ"}
Dim results = From animal In animals Select CStr(animal.Length)
ListBox1.Items.AddRange(results.ToArray())
投稿者 トマト  (小学生) 投稿日時 2009/8/25 22:13:30
では、「サンプルが間違っていた」ということにしておけばいいのですね。
では、第3回を読んでLINQにもっと触れ合ってみます。