C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Array.ForEachについて


(過去ログ 78 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■46225 / inTopicNo.1)  Array.ForEachについて
  
□投稿者/ alvin (44回)-(2010/01/28(Thu) 14:54:08)

分類:[VB.NET/VB2005 以降] 

いつもお世話になっております。

今度はArray.ForEachについて質問させていただきます。

環境:VS2008 VB.NET

メインメソッド
----------------------------------
Dim lst As New List(Of String)
lst.Add("a")
lst.Add("b")

Dim doAction As System.Action(Of String)
doAction = AddressOf MsgShow

lst.ForEach(doAction) ←書き方1:この書き方は正しく動作する

'Array.ForEach(lst, doAction) ←書き方2:この書き方はエラーがでる
'Arrar.ForEach(lst, doAction(Of String)) ←書き方3:この書き方はエラーがでる
-----------------------------------------

Sub MsgShow(ByVal msg As String)
MsgBox(msg)
End Sub
------------------------------------------

質問:
書き方1の時には、正しく各要素がメッセージボックスで表示されるが、
書き方2、3の場合、ビルドが通らないですが、正しく書き方は何でしょうか?

引用返信 編集キー/
■46226 / inTopicNo.2)  Re[1]: Array.ForEachについて
□投稿者/ 魔界の仮面弁士 (1464回)-(2010/01/28(Thu) 15:03:49)
2010/01/28(Thu) 15:15:41 編集(投稿者)

No46225 (alvin さん) に返信
> 書き方2、3の場合、ビルドが通らないですが、正しく書き方は何でしょうか?
Array.ForEach の第2引数の指定方法に着目しているようですが、
問題になっているのは、むしろ第1引数の方です。


> lst.ForEach(doAction) ←書き方1:この書き方は正しく動作する
ここで呼び出されているのは、
 『List(Of T) クラスの Sub ForEach( Action(Of T) ) メソッド』
ですよね。

> 'Array.ForEach(lst, doAction) ←書き方2:この書き方はエラーがでる
一方、ここで呼び出そうとしているのは、
 『Array クラスの Sub ForEach(Of T)( T(), Action(Of T) ) 共有メソッド』
です。lst は「T の配列では無い」ので、上記のようには書けません。

強いて書くなら、配列に変換して
 Array.ForEach(lst.ToArray(), doAction)
のように記述することになるでしょう。

> 'Arrar.ForEach(lst, doAction(Of String)) ←書き方3:この書き方はエラーがでる
この場合、Of を指定するのであれば、
 Array.ForEach(Of String)(lst.ToArray(), doAction)
のように記述します。

あるいは
 Array.ForEach(Of String)(lst.ToArray(), New System.Action(Of String)(AddressOf MsgBox))
とか
 Array.ForEach(Of String)(lst.ToArray(), AddressOf MsgShow)
とか
 Array.ForEach(Of Object)(lst.ToArray(), AddressOf MsgBox)
とか
 Array.ForEach(lst.ToArray(), AddressOf MsgBox)
とか
 lst.ForEach(AddressOf MsgShow)
とか
 lst.ForEach(AddressOf MsgBox)
とか
 lst.ForEach(Function(msg) MsgBox(msg))
とか。
引用返信 編集キー/
■46227 / inTopicNo.3)  Re[2]: Array.ForEachについて
□投稿者/ alvin (45回)-(2010/01/28(Thu) 15:21:20)
2010/01/28(Thu) 15:22:00 編集(投稿者)
2010/01/28(Thu) 15:21:43 編集(投稿者)

No46226 (魔界の仮面弁士 さん) に返信

解決いたしました。
List = 一元配列って認識してしまいました。

どうもありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -