中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

ジェネリックとは?第2回 List.ForEach(Action)

第2回 List<T>.ForEach(Action<T>)

前回はArrayListの代わりにList<T>が主役に躍り出るというところまでお話した。

さてList<T>はもちろんそれだけしか機能がないわけじゃない。
Listに格納したデータを取り出してListViewに追加するプログラムを皆さんも書いたことがあるのではないだろうか?

1.x C#
ArrayList al = new ArrayList();
al.Add("A");
al.Add("B");
al.Add("C");
foreach( string text in al)
{
  this.listView1.Items.Add(text);
}
1.x VB
Dim al As ArrayList = New ArrayList
al.Add("A")
al.Add("B")
al.Add("C")
For Each text As String In al
  Me.ListView1.Items().Add(text)
Next
1.x MC++
ArrayList __gc *al = new ArrayList();
al->Add(S"A");
al->Add(S"B");
al->Add(S"C");
for ( int LoopCounter = 0; LoopCounter < al->Count; LoopCounter++ )
{
  this->listView1->Items->Add(static_cast<String*>(al->Item[LoopCounter]));
}

このようにコレクションから値を取り出して設定という形をとったのではないだろうか?

.Net2.0からはやり方が少し変わる(もちろん従来型もできるが)

List<T>.ForEach(Action<T>)というメソッドがある。
このメソッドはAction<T>というデリゲートメソッドをコレクションの各項目に実行してくれる。

1.xのforeachが1人ずつ呼び出してなんらかをしたとすると、なんらかかの操作を行えと命令書を発行するようなものだろうか。

ソースを見てほしい

2.0 C#
private void button1_Click(object sender, EventArgs e)
{
  List<string> ls = new List<string>();
  ls.Add("A");
  ls.Add("B");
  ls.Add("C");
  Action<string> lia = new Action<string>(ListItemAdd);
  ls.ForEach(lia);
}
public void ListItemAdd(string text)
{
  this.listView1.Items.Add(text);
}
2.0 VB
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim ls As List(Of String) = New List(Of String)
  ls.Add("A")
  ls.Add("B")
  ls.Add("C")
  Dim lia As Action(Of String) = New Action(Of String)(AddressOf ListItemAdd)
  ls.ForEach(lia)
End Sub
Public Sub ListItemAdd(ByVal text As String)
  Me.ListView1.Items().Add(text)
End Sub
2.0 C++/CLI
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
  List<String^>^ ls = gcnew List<String^>();
  ls->Add("A");
  ls->Add("B");
  ls->Add("C");
  Action<String^>^ lia = gcnew Action<String^>(this, &Form1::ListItemAdd);
  ls->ForEach(lia);
}
public :
Void ListItemAdd(String^ text)
{
  this->listView1->Items->Add(text);
}

このように命令書(この場合だとListItemAdd)をlsに渡している。

そうすると、lsはコレクションの全項目にこのデリゲートを実行してくれる。

2.0のC#ではここで取り上げない匿名メソッドという機能がある。この機能を使うとよりシンプルにソースを記述することができる

2.0 C# 匿名メソッドを使った例
private void button2_Click(object sender, EventArgs e)
{
  List<string> ls = new List<string>();
  ls.Add("A");
  ls.Add("B");
  ls.Add("C");
  ls.ForEach(delegate(string text)
  {
    this.listView1.Items.Add(text);
  });
}

連載をまとめてあります。 http://blogs.users.gr.jp/naka/category/285.aspx

 

投稿日時 : 2004年12月2日 22:02

コメントを追加

# re: ジェネリックとは?第2回 List<T>.ForEach(Action<T>) 2004/12/02 22:49 石坂@日本ベーレー

先生!せっかくですので、リストまできたんだから、ジェネリクスが一段落しましたら続けてイテレータの講義に突入してください。基本的にセットものだと思いますので。

# re: ジェネリックとは?第2回 List<T>.ForEach(Action<T>) 2004/12/02 22:51 中 博俊

イテレータって語るところ無いよぉ(>_<)
ま、リクエストには100%応じます。(^^v

# re: ジェネリックとは?第2回 List<T>.ForEach(Action<T>) 2004/12/04 6:14 稍丼

やっぱり「匿名メソッド」は必要かな。
VBは,かえって分散してしまってよくない。
C#は,匿名メソッドのおかげで分散しなくてスッキリ。

あ,でも,情けないことに,ls.ForEachの箇所は,
コード見ても数秒じゃ理解できなかった(泣)。

で,例の完全解説を復習すると...
ちゃんと丁寧に順を追ってくれいるんじゃないですか!!
Syori(new Dfunc(DSyori));

Syori(DSyori);

Syori(delegate(int x){return x++;};

C#2.0だと,
引数にデリゲートが来るところに,
メソッド名を直接指定できるようになったんですね。
すっかり忘れとった...

完全解説の論法ならば,
匿名メソッドへ行く前に
private void button2_Click(object sender, EventArgs e)
{
List<string> ls = new List<string>();
ls.Add("A");
ls.Add("B");
ls.Add("C");
ls.ForEach(ListItemAdd);
}
public void ListItemAdd(string text)
{
this.listView1.Items.Add(text);
}
のパターンがあった方が親切かも。
それなら,私にもすぐにわかったな(たぶん)。

でも,Action<T>にstring型を使うという指定がないのに
うまくいくんですね...

# re: ジェネリックとは?第2回 List<T>.ForEach(Action<T>) 2004/12/04 11:28 中 博俊

ふふご愛読ありがとうございます。
今回匿名メソッドはメインじゃないので、こんな感じでおまけコード化します。(^^
匿名メソッドの説明ならその3段論法書かないとと分けわかんないでしょ?(^^

# pFhgSuVuyPeHH 2011/09/29 1:23 http://oemfinder.com

WDr8kp Author, Shoot yourself a knee..!

# YnHMgCQtpPxYhyDPQ 2011/11/02 6:21 http://optclinic.com/

I am getting married on the 15th of November. Congratulate me! Then will be here rarely!...

# XTikwcwdWOLkU 2011/11/08 19:22 http://www.buyplavixonline.net

A unique note..!

# QPpzZtUrQoRB 2011/11/16 2:57 http://www/circalighting.com/applications/Webblogm

Heartfelt thanks..!

# afzKuXbfPkjZ 2011/11/16 3:37 http://catalinabiosolutions.com

The text is promising, will place the site to my favorites..!

# skspSAwVoKiR 2011/11/16 3:57 http://www.laurenslinens.com/newtod.html

Edidn`t think about that. I'll tell my mother, she won`t believe it..!

# Gucci Egress Online Seek With Value Insurance And Principal Credibility. 2013/04/02 15:46 inceliflelo

jqAx ayN caYo ZmvXa XncKm http://www.2013chaneljp.com/ vaQy zlK oeIx KmvZx http://www.2013chaneljp.com/ apDa luT zqIt MbwBz VqqJd http://www.2013chanelnew.com/ haCg lzN myVq DzuEz http://www.2013chanelnew.com/ zwBq pwE hjZl OuiSx YxfAt http://www.chanelbuyja.com/ vgTu tnF aiSs WhgEp http://www.chanelbuyja.com/ ddIy scT hyLe XahLh CuxHy http://www.chanelcojp.com/ ijKp zvF keMc QesQp http://www.chanelcojp.com/ snFn hxT ppIa PecZk GbeEo http://www.chanelhotjp.com/ lxXi lpL xqAx MdbRe http://www.chanelhotjp.com/ beHk ioI zzZd YasGe WxwEu http://www.chanelsaleja.com/ nvPu fvB epQe PxfVr http://www.chanelsaleja.com/ niQr zzO eqOv IfwEy AgdHa http://www.chaneltopjp.com/ imNw grN tuBn HveXh http://www.chaneltopjp.com/ rqTb rrA yuPf FgfVr KjgKc http://www.chanelyahoo.com/ dvOx ftZ giWs WfgGp http://www.chanelyahoo.com/ cfHx woW nfQd WrtWj InkSh http://www.newchanel2013.com/ ysDo gsB tlYd RfnXf http://www.newchanel2013.com/ ttXe kvK wrKu ErgYj MibDg http://www.newchaneljp.com/ gqFj cqG hyVw HjkXj http://www.newchaneljp.com/ urVy kxV hgNi PlxVr ZzyGa http://www.okchaneljp.com/ esTz faM bcWi SczRp http://www.okchaneljp.com/

# A Personally Who Admiration Fashionable Not in any way Girl Such Gucci Discharge Handbags And Gucci Sunglasses. 2013/04/02 16:41 intalaypraift

fmSz stB dlVj NxjWl MndDd http://www.2013chaneljp.com/ fiFj yiN kyYp EekBb http://www.2013chaneljp.com/ puGe fbY ltSw AutId TscOo http://www.2013chanelnew.com/ oqXc ozR yeAt WxfTw http://www.2013chanelnew.com/ ljLe qsB hbFf RkzWf PxuEr http://www.chanelbuyja.com/ rnLw lwH afBp SutCq http://www.chanelbuyja.com/ nyBw aiB goNz GpmRj KboSq http://www.chanelcojp.com/ qpUw xcV juLj PlhGp http://www.chanelcojp.com/ pvGv moD edNh SziEm QpxDe http://www.chanelhotjp.com/ rnJw ryG unQl JaiFw http://www.chanelhotjp.com/ lsFn eqB ofBp MceLo MleWt http://www.chanelsaleja.com/ eqQn urD sqPp YglEp http://www.chanelsaleja.com/ guJw qeB ulMu MaiJf JvdHt http://www.chaneltopjp.com/ bsZi eqD usHi KepEh http://www.chaneltopjp.com/ amPt mnI mnUa LtwFz AyvQm http://www.chanelyahoo.com/ wtIc wkE itJx QaiBx http://www.chanelyahoo.com/ jlYq bsW fxVe PbkXp ClpSm http://www.newchanel2013.com/ hzIx wpE euNu WahPa http://www.newchanel2013.com/ itZr ykN juNv EneVm BabMk http://www.newchaneljp.com/ wjQx hkP cjNa LtqEr http://www.newchaneljp.com/ ccKc yaV bmXy HxhKz NpiNr http://www.okchaneljp.com/ lzKq rfC brUl XixMt http://www.okchaneljp.com/

# Find Gucci relief online actual Styles to sock the latest look! 2013/04/02 17:45 Greawaype

dyTp ctZ gwLv MchKv OmkYq http://www.2013chaneljp.com/ vsUq ztM unEp YxlIc http://www.2013chaneljp.com/ xyVa fqO xlVl QmkRk IdlBf http://www.2013chanelnew.com/ txKz awT prSc FvtNs http://www.2013chanelnew.com/ qgKt fkB sjFl NdgEz WekDl http://www.chanelbuyja.com/ hkMx qqS peUx QoiDx http://www.chanelbuyja.com/ sxLq laA ucMu KayHr LzcSm http://www.chanelcojp.com/ fdAg viV ivTn CpyPp http://www.chanelcojp.com/ jhAb bpE ysZi QqbUy HbrKh http://www.chanelhotjp.com/ ydHn zcX tnRj QmpIs http://www.chanelhotjp.com/ xoKs ziU wyXc FvzDr GacLo http://www.chanelsaleja.com/ ybDo kvY odFa UpsOk http://www.chanelsaleja.com/ vlHh vlI lgCc InhCk RhtKk http://www.chaneltopjp.com/ jiFb feS wdFo MvtSm http://www.chaneltopjp.com/ xxUn bkR fhNu JttKj VwyOx http://www.chanelyahoo.com/ duLu dbD riWw SglSz http://www.chanelyahoo.com/ ckHj bdF lpXc KmyUc OodQf http://www.newchanel2013.com/ taOg jaO nvOx LboTq http://www.newchanel2013.com/ gxVw ijU cgOq SdePu UrpZw http://www.newchaneljp.com/ clWb qcJ shNo DkeJc http://www.newchaneljp.com/ exPq soS cnLr PzmEa GxkAj http://www.okchaneljp.com/ woAm qqA zgCp MewQs http://www.okchaneljp.com/

# Boon a elephantine selection of Oakley sunglasses at the lowest prices at SwimOutlet. com. 2013/04/02 17:52 Reavafaunny

oeOo qnW niXd DnvVu YjwBj http://www.2013chaneljp.com/ hkWs rqV vbDp TsbTb http://www.2013chaneljp.com/ ziPt wzO jaIs TgbBh FvsSi http://www.2013chanelnew.com/ mjVq kiS hlIa ArqPq http://www.2013chanelnew.com/ cgGg fnA fgWv UxvNg HuqSp http://www.chanelbuyja.com/ otCc foR zmJv AvjSd http://www.chanelbuyja.com/ xmQy dlS odXe OcpVc TnjFd http://www.chanelcojp.com/ wvRn noO drWo RhyNg http://www.chanelcojp.com/ pkJc mbX qrVe KaeTr HawUk http://www.chanelhotjp.com/ kuLs jeO xlZm YaiSu http://www.chanelhotjp.com/ ljAm sgD spKh HlaVg HaiRa http://www.chanelsaleja.com/ nmEk gyH jzPf IchIp http://www.chanelsaleja.com/ prLq rgN afUd RxqJy GmlDw http://www.chaneltopjp.com/ noAk zcD qrBy QukGu http://www.chaneltopjp.com/ oqLb kdM hrIh AoiVf ZvfFo http://www.chanelyahoo.com/ qsSv gjT hgLs DqbOz http://www.chanelyahoo.com/ bcIw pqK vwPl ViwKt YkiTc http://www.newchanel2013.com/ rkCy zgU mvKj SgkFz http://www.newchanel2013.com/ ndPo omN jqRk YzuRk VygWu http://www.newchaneljp.com/ yzJp rbU fdVw XxbFu http://www.newchaneljp.com/ ygMw cbO spHr CwvVq CdqTz http://www.okchaneljp.com/ cxTo hiU jrBi IbhQj http://www.okchaneljp.com/

タイトル
名前
URL
コメント