<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C#</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/category/418.aspx</link><description>C#</description><managingEditor>επιστημη</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>επιστημη</dc:creator><title>[いまさらWPF] ObservableなKeyedCollection</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2012/11/01/296773.aspx</link><pubDate>Thu, 01 Nov 2012 21:54:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2012/11/01/296773.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/296773.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2012/11/01/296773.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/296773.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/296773.aspx</trackback:ping><description>&lt;p&gt;いまさらながらにWPFのおべんきょを始めちゃったりとか。&lt;br&gt;んで、Bindingてーもんがあらかたわかってきたです。&lt;br&gt;&lt;br&gt;ListBox/ListViewなどなど、&lt;strong&gt;データ列を相手&lt;/strong&gt;にするコントロールにバインドするデータちゅーと&lt;br&gt;ObservableCollectionなわけですが、"&lt;strong&gt;辞書&lt;/strong&gt;"をListViewに載せたくなりました。&lt;br&gt;使えそうなクラスがないかとKeyedCollectionを見つけたけども、これってObservableじゃないので&lt;br&gt;ナカミの変化がコントロールに&lt;strong&gt;反映されへん&lt;/strong&gt;。どーしたもんじゃろ...&lt;br&gt;&lt;br&gt;んむ、どうやらINotifyCollectionChangedを実装してやればよさげなんで、&lt;br&gt;ObservableKeyedCollection&amp;lt;TKey,TItem&amp;gt;　なんてのをこしらえてみたですよ。&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre&gt;&lt;font color="blue"&gt;using&lt;/font&gt; System;
&lt;font color="blue"&gt;using&lt;/font&gt; System.Collections.Generic;
&lt;font color="blue"&gt;using&lt;/font&gt; System.Collections.ObjectModel;
&lt;font color="blue"&gt;using&lt;/font&gt; System.Collections.Specialized;

&lt;font color="blue"&gt;namespace&lt;/font&gt; System.Collections.ObjectModel.Wankuma
{
    &lt;font color="blue"&gt;public&lt;/font&gt; abstract &lt;font color="blue"&gt;class&lt;/font&gt; ObservableKeyedCollection&amp;lt;TKey, TItem&amp;gt; : KeyedCollection&amp;lt;TKey, TItem&amp;gt;, INotifyCollectionChanged
    {
        &lt;font color="blue"&gt;public&lt;/font&gt; ObservableKeyedCollection() : base() { }
        &lt;font color="blue"&gt;public&lt;/font&gt; ObservableKeyedCollection(IEqualityComparer&amp;lt;TKey&amp;gt; comparer) : base(comparer) { }
        &lt;font color="blue"&gt;public&lt;/font&gt; ObservableKeyedCollection(IEqualityComparer&amp;lt;TKey&amp;gt; comparer, &lt;font color="blue"&gt;int&lt;/font&gt; dictionaryCreationThreshold) : base(comparer, dictionaryCreationThreshold) { }

        &lt;font color="blue"&gt;protected&lt;/font&gt; override &lt;font color="blue"&gt;void&lt;/font&gt; InsertItem(&lt;font color="blue"&gt;int&lt;/font&gt; index, TItem item)
        {
            base.InsertItem(index, item);
            &lt;font color="blue"&gt;if&lt;/font&gt; (CollectionChanged != null)
            {
                CollectionChanged(&lt;font color="blue"&gt;this&lt;/font&gt;, &lt;font color="blue"&gt;new&lt;/font&gt; NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, index));
            }
        }

        &lt;font color="blue"&gt;protected&lt;/font&gt; override &lt;font color="blue"&gt;void&lt;/font&gt; SetItem(&lt;font color="blue"&gt;int&lt;/font&gt; index, TItem item)
        {
            base.SetItem(index, item);
            &lt;font color="blue"&gt;if&lt;/font&gt; (CollectionChanged != null)
            {
                CollectionChanged(&lt;font color="blue"&gt;this&lt;/font&gt;, &lt;font color="blue"&gt;new&lt;/font&gt; NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, item, index));
            }
        }

        &lt;font color="blue"&gt;protected&lt;/font&gt; override &lt;font color="blue"&gt;void&lt;/font&gt; RemoveItem(&lt;font color="blue"&gt;int&lt;/font&gt; index)
        {
            TItem item = &lt;font color="blue"&gt;this&lt;/font&gt;[index];
            base.RemoveItem(index);
            &lt;font color="blue"&gt;if&lt;/font&gt; (CollectionChanged != null)
            {
                CollectionChanged(&lt;font color="blue"&gt;this&lt;/font&gt;, &lt;font color="blue"&gt;new&lt;/font&gt; NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item));
            }
        }

        &lt;font color="blue"&gt;protected&lt;/font&gt; override &lt;font color="blue"&gt;void&lt;/font&gt; ClearItems()
        {
            base.ClearItems();
            &lt;font color="blue"&gt;if&lt;/font&gt; (CollectionChanged != null)
            {
                CollectionChanged(&lt;font color="blue"&gt;this&lt;/font&gt;, &lt;font color="blue"&gt;new&lt;/font&gt; NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
            }
        }

        &lt;font color="blue"&gt;public&lt;/font&gt; event NotifyCollectionChangedEventHandler CollectionChanged;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;おためしにねじ込んでみたのがコチラ↓&lt;/p&gt;
&lt;img src="http://www1.c3-net.ne.jp/episteme/images/ObservableKeyedCollection.png"&gt;
&lt;p&gt;いいカンジにできちゃったみたい♪ プロジェクト放出します。&lt;br&gt;まだまだヒヨッコなんでがしがしつっこんでくだせ。&lt;br&gt;
&lt;iframe height="120" src="https://skydrive.live.com/embed?cid=07C558F8E11E708F&amp;amp;resid=7C558F8E11E708F%21816&amp;amp;authkey=ADd0KLRHjwQz63I" frameBorder="0" width="98" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/296773.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>わんくま東京勉強会#58 あふたけあ</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2011/04/24/198620.aspx</link><pubDate>Sun, 24 Apr 2011 09:15:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2011/04/24/198620.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/198620.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2011/04/24/198620.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/198620.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/198620.aspx</trackback:ping><description>&lt;P&gt;ホントひっさしぶりのセッションでした。&lt;BR&gt;愉しんでいただけたなら幸甚ﾅﾘ。&lt;/P&gt;
&lt;P&gt;セッション・デモで使ったソリューションを放流しておきます。&lt;BR&gt;&lt;A href="http://cid-07c558f8e11e708f.office.live.com/self.aspx/%e3%82%82%e3%81%a3%e3%81%a6%e3%81%91%e3%83%89%e3%83%ad%e3%83%9c%e3%83%bc/StatePattern^_T4.zip"&gt;http://cid-07c558f8e11e708f.office.live.com/self.aspx/%e3%82%82%e3%81%a3%e3%81%a6%e3%81%91%e3%83%89%e3%83%ad%e3%83%9c%e3%83%bc/StatePattern^_T4.zip&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;セッション後、えムナウさんから「ひとつのtemplateから複数のコード生成できるよー」てﾂｯｺﾐが。&lt;BR&gt;あ、はい。 hostspecific='true' にしてT4-engineを明示的にkickすればできるのは知ってたけどさっくり割愛させていただきやした。&lt;BR&gt;えムナウさんつっつけば教えてくれるとおもうよ♪&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/198620.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>渡る者の途絶えた橋 (C#/LINQ版)</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2011/01/28/196717.aspx</link><pubDate>Fri, 28 Jan 2011 22:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2011/01/28/196717.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/196717.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2011/01/28/196717.aspx#Feedback</comments><slash:comments>223</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/196717.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/196717.aspx</trackback:ping><description>&lt;P&gt;えとー、こんなもんかの。&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2 face="Courier New"&gt;#define SET_3&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;namespace DAG {&lt;BR&gt;&amp;nbsp; struct bridge {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public char fr;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public char to;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bridge(char f, char t) { fr = f; to = t; }&lt;BR&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;&amp;nbsp; class Program&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;bridge&amp;gt; path = new List&amp;lt;bridge&amp;gt;&lt;BR&gt;#if SET_1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('A','B'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('B','C'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('A','C'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('A','D'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('C','D'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR&gt;#elif SET_2&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('A','B'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('A','C'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('B','C'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('B','D'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('D','A'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('D','C'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR&gt;#elif SET_3&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('A','B'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('B','C'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('C','D'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('D','E'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('E','F'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('F','G'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('G','H'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new bridge('H','F'),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR&gt;#endif&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ( true ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// 表示&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path.ForEach(item =&amp;gt; Console.WriteLine("{0}-&amp;gt;{1}", item.fr, item.to));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// 入口/出口セットを作る&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var froms = (from item in path select item.fr).Distinct();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var tos&amp;nbsp;&amp;nbsp; = (from item in path select item.to).Distinct();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// 入口/出口セットの一方にあって他方にないものをremoveに&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // symmetrc-diference に相当するもんがなさげな&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face="Courier New"&gt;&lt;FONT color=#008000&gt;んで"X-Y と Y-X の和集合"で代用&lt;BR&gt;&lt;/FONT&gt;　　　　 var remove = Enumerable.Union(froms.Except(tos), tos.Except(froms));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( remove.Count() == 0 ) break;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// removeに含まれない橋を抽出する&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path = (from item in path &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where !(remove.Contains(item.fr) || remove.Contains(item.to)) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select item).ToList();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(path.Count() == 0 ? "DAG!!" : "cyclic!!");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/196717.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>反転...ですかー</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/03/04/186775.aspx</link><pubDate>Thu, 04 Mar 2010 16:40:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/03/04/186775.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/186775.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/03/04/186775.aspx#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/186775.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/186775.aspx</trackback:ping><description>ネタ元 → &lt;A id=RecentPosts__ctl0_Hyperlink2 HREF="/rti/archive/2010/03/04/186773.aspx"&gt;ホワイトボードプログラミング&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;「ループを使わずに配列の順序を逆にする。」&lt;BR&gt;えーと&amp;#8230;できる限りずる賢く。&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2 face="Courier New"&gt;class Program {&lt;BR&gt;&amp;nbsp; public static void Main() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[] array&amp;nbsp; = new [] { 1, 2, 3, 4, 5 };&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// 一行!&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;array = (new System.Collections.Generic.Stack&amp;lt;int&amp;gt;(array)).ToArray();&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ( int item in array ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine(x);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/186775.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>DbC/PbC と NVI</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/02/02/185640.aspx</link><pubDate>Tue, 02 Feb 2010 11:28:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/02/02/185640.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/185640.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/02/02/185640.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/185640.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/185640.aspx</trackback:ping><description>&lt;P&gt;先週末のわんくま東京勉強会、ひさしぶりに懇親会に出たなり。&lt;/P&gt;
&lt;P&gt;ま、それはそれとして、中さんのセッション: Spec# は面白かたあるよ。&lt;BR&gt;DbC(Design by Contract:契約による設計) / PbC(Programming by Contract:契約プログラミング)&lt;BR&gt;はEiffelやDあたりがサポートしてるんだけど、そいつをC#でもやっちまえって魂胆ね &amp;gt; Spec#&lt;/P&gt;
&lt;P&gt;従来&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;class Base {&lt;BR&gt;&amp;nbsp; public virtual int func(int x) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;Debug.Assert(x &amp;gt; 0 &amp;amp;&amp;amp; x &amp;lt; 10); //事前条件: x = 0..9 でなければならない&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int result = ごーにょごにょ&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#ff0000&gt;&lt;STRONG&gt;Debug.Assert(result &amp;gt;= 0); // 事後条件: 0以上を返すことをここに誓う&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;なんてな Assert で利用者が守るべき契約(事前条件) 提供者が守る契約(事後条件) を&lt;BR&gt;コード上に明記しよう。そうすることでより&lt;STRONG&gt;堅牢でバグの少ない&lt;/STRONG&gt;(あっても直ちに判明する)&lt;BR&gt;コードを書こうや、と。&lt;BR&gt;# 不変表明(invariant)ゆーのんもありますがー&lt;BR&gt;&lt;BR&gt;ここで問題となるのが、派生クラスで func をoverrideしちまったとき、&lt;BR&gt;Base::funcに埋め込まれた契約条件がoverride側に適用されんです。&lt;BR&gt;で、こいつの解決策のひとつが&lt;STRONG&gt;NVI&lt;/STRONG&gt;(Non Virtual Interface)ってイディオム。&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;「利用者にvirutalなメソッドを晒すなﾎﾞｹｪ」&lt;/STRONG&gt;てことっす。&lt;BR&gt;んじゃどーするかっちゅーと:&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;class Base {&lt;BR&gt;&amp;nbsp; public sealed int func(int x) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.Assert(x &amp;gt; 0 &amp;amp;&amp;amp; x &amp;lt; 10); //事前条件: x = 0..9 でなければならない&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int result = &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;do_func&lt;/FONT&gt;&lt;/STRONG&gt;(x);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debug.Assert(result &amp;gt;= 0); // 事後条件: 0以上を返すことをここに誓う&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; &lt;FONT color=#ff0000&gt;protected virtual int do_func(int x)&lt;/FONT&gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ごーにょごにょ;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;こーしておく。派生クラスはfuncから呼ばれてる do_func をoverrideするのね。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/185640.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>くだらんことやってますのん</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/01/23/185263.aspx</link><pubDate>Sat, 23 Jan 2010 06:46:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/01/23/185263.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/185263.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2010/01/23/185263.aspx#Feedback</comments><slash:comments>223</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/185263.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/185263.aspx</trackback:ping><description>&lt;P&gt;ケッタイなこと頼まれましてね。&lt;BR&gt;えとね、たとえばこんな数枚のWeb-pageがあったとするやないですか。 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://episteme.wankuma.com/image/blog/clip1.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip1 border=0 alt=clip1 src="http://episteme.wankuma.com/image/blog/clip1.jpg" width=194 height=159&gt;&lt;/A&gt; とか&lt;A href="http://episteme.wankuma.com/image/blog/clip2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=clip2 border=0 alt=clip2 src="http://episteme.wankuma.com/image/blog/clip2.jpg" width=183 height=158&gt;&lt;/A&gt; とか。&lt;/P&gt;
&lt;P&gt;最初のページのURLあげるから、&lt;/P&gt;
&lt;P&gt;「リンクを次々に辿りながらtable内の&amp;lt;td&amp;gt;～&amp;lt;/td&amp;gt;を拾って一本の表を仕立ててくれ」&lt;/P&gt;
&lt;P&gt;ってんですよ。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://episteme.wankuma.com/image/blog/listview.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=listview border=0 alt=listview src="http://episteme.wankuma.com/image/blog/listview.jpg" width=304 height=304&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;こんな感じで。&lt;/P&gt;
&lt;P&gt;つまりこの、HTMLを解析しぃのページ上のリンクをつつきぃの、そゆこと自動でやってくれと。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;んで僕が目を付けたのが selenium てゆー Web-アプリのTestTool.&lt;BR&gt;seleniumはブラウザ上での人の操作を記録し、play-backしてくれます。&lt;/P&gt;
&lt;P&gt;面白いことに、このseleniumを外から(.NETやらJavaやらPHPやらRubyやらで)&lt;/P&gt;
&lt;P&gt;リモコン操作できるんす。&lt;/P&gt;
&lt;P&gt;こいつを使ってページを渡り歩き、seleniumが読みだしたHTMLをパーサで解析してます。&lt;BR&gt;.NET Frameworkには出来合いのHTMLパーサがなさげ(よね?)なので、&lt;BR&gt;「すまんけどXHTMLなページ限定」と念を押してXML-domパーサ使いました。&lt;BR&gt;&amp;#8221;GET&amp;#8221;ボタン押すと↓こんなのが動きます。　40行で書けちゃったですよ。&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ef5e5598-a36c-49fe-bcc6-3c14f44e3643 class=wlWriterSmartContent&gt;
&lt;DIV class="dp-highlighter nogutter"&gt;
&lt;DIV class=bar&gt;&lt;/DIV&gt;
&lt;OL class=dp-c&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&lt;SPAN class=keyword&gt;private&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;void&lt;/SPAN&gt;&lt;SPAN&gt; btnGET_Click(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;object&lt;/SPAN&gt;&lt;SPAN&gt; sender, EventArgs e)&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;{&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; serverURL = &lt;/SPAN&gt;&lt;SPAN class=string&gt;"localhost"&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;int&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serverPort = 4444;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; targetBrowser = &lt;/SPAN&gt;&lt;SPAN class=string&gt;"*firefox"&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; targetURL = &lt;/SPAN&gt;&lt;SPAN class=string&gt;"http://www1.c3-net.ne.jp/episteme/"&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; Selenium.DefaultSelenium(serverURL, serverPort, targetBrowser, targetURL);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.Start();&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.Open(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"/episteme/CodeZine/trial.html"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;while&lt;/SPAN&gt;&lt;SPAN&gt; ( &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;true&lt;/SPAN&gt;&lt;SPAN&gt; ) {&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder builder = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; StringBuilder(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"&amp;lt;?xml version='1.0' ?&amp;gt;"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=comment&gt;// 得られたHTMLから&amp;lt;body&amp;gt;～&amp;lt;/body&amp;gt;を抽出し、&amp;lt;html&amp;gt;～&amp;lt;/html&amp;gt;ではさむ &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; builder.Append(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"&amp;lt;html&amp;gt;"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; html = selenium.GetHtmlSource();&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; startpos = html.IndexOf(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"&amp;lt;body"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; endpos = html.IndexOf(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"/body&amp;gt;"&lt;/SPAN&gt;&lt;SPAN&gt;) + 6;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; builder.Append(html, startpos, endpos - startpos);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; builder.Append(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"&amp;lt;/html&amp;gt;"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=comment&gt;// XHTMLをXMLパーサで解析 &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDocument document = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; XmlDocument();&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.Load(&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; StringReader(builder.ToString()));&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=comment&gt;// &amp;lt;tr&amp;gt;～&amp;lt;/tr&amp;gt; を抽出し、その中の&amp;lt;td&amp;gt;～&amp;lt;/td&amp;gt;で行を構成する &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;foreach&lt;/SPAN&gt;&lt;SPAN&gt; ( XmlNode row &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;in&lt;/SPAN&gt;&lt;SPAN&gt; document.DocumentElement.GetElementsByTagName(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"tr"&lt;/SPAN&gt;&lt;SPAN&gt;) ) {&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ListViewItem item = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;null&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;bool&lt;/SPAN&gt;&lt;SPAN&gt; first = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;foreach&lt;/SPAN&gt;&lt;SPAN&gt; (XmlNode node &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;in&lt;/SPAN&gt;&lt;SPAN&gt; row.ChildNodes) {&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (node.Name != &lt;/SPAN&gt;&lt;SPAN class=string&gt;"td"&lt;/SPAN&gt;&lt;SPAN&gt;) &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (first) item = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; ListViewItem(node.InnerText)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;else&lt;/SPAN&gt;&lt;SPAN&gt; item.SubItems.Add(node.InnerText);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; first = &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; ( item != &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;null&lt;/SPAN&gt;&lt;SPAN&gt; ) lstTable.Items.Add(item);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=comment&gt;// HTML中に"これでおしまい"を見つけたら終了。 &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; (selenium.IsTextPresent(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"これでおしまい"&lt;/SPAN&gt;&lt;SPAN&gt;)) &lt;/SPAN&gt;&lt;SPAN class=keyword&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=comment&gt;// さもなくば "こちら"が示すリンクに飛ぶ &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.Click(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"link=こちら"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.WaitForPageToLoad(&lt;/SPAN&gt;&lt;SPAN class=string&gt;"30000"&lt;/SPAN&gt;&lt;SPAN&gt;);&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI class=alt&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; selenium.Stop();&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;
&lt;LI&gt;&lt;SPAN&gt;}&amp;nbsp; &lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/185263.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>ActionとFunc</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/12/17/183931.aspx</link><pubDate>Thu, 17 Dec 2009 18:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/12/17/183931.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/183931.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/12/17/183931.aspx#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/183931.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/183931.aspx</trackback:ping><description>&lt;p&gt;C++のばやい、voidを返すことができます。たとえば:&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a9758950-07b5-4733-9632-e28819d96f03" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c:nogutter:nocontrols"&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;functional&amp;gt;

namespace std { using namespace std::tr1; }

void f() { std::cout &amp;lt;&amp;lt; "f()\n"; }
void g() { std::cout &amp;lt;&amp;lt; "g() calls:"; return f(); } // ココ!

int main() {
  std::function&amp;lt;void(void)&amp;gt; function = g;
  function();
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;かたやC#では:&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f3ce17e8-9c19-4035-af9f-e795d236cd12" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#:nogutter:nocontrols"&gt;using System;

class Program {
  public static void f() { Console.WriteLine("f()"); }
  public static void g() { Console.Write("g() calls:"); return f();} // ココ!
  
  public static void Main() {
    g();
  }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;error CS0127: 'Program.g()' は void 型を返すため、キーワード&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&amp;nbsp; の後にオブジェクト式を指定することはできません。&lt;/p&gt;しょぼーん。&lt;br&gt;&lt;br&gt;Action&amp;lt;T&amp;gt; と Func&amp;lt;T,TResult&amp;gt; を統一的に扱いたく&lt;br&gt;# つまり戻り値voidでもFuncで済ましたくて&lt;br&gt;&lt;br&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ac5a299d-dc37-4e9d-8db0-66678f676311" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#:nogutter:nocontrols"&gt;using System;

class Program {
  public static void Main() {
    Action&amp;lt;string&amp;gt; a = (s)=&amp;gt;{ Console.WriteLine("{0}ワールド",s); };
    a("ヘロー"); // ↓ココ!
    Func&amp;lt;string,typeof(void)&amp;gt; f = (s)=&amp;gt;{ Console.WriteLine("{0}ワールド",s); };
    f("なるほど ザ・");
  }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;error CS1525: 'string' は無効です。&lt;br&gt;error CS1525: ',' は無効です。&lt;br&gt;error CS1002: ; が必要です。&lt;/p&gt;お、おまえは何を言っているのだ!?&lt;br&gt;# typeof() って静的に解決できるんじゃないのぅ?&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/183931.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>データ構造なめんな</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/12/06/183571.aspx</link><pubDate>Sun, 06 Dec 2009 01:13:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/12/06/183571.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/183571.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/12/06/183571.aspx#Feedback</comments><slash:comments>6349</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/183571.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/183571.aspx</trackback:ping><description>&lt;p&gt;ネタ元 → &lt;a href="http://blogs.wankuma.com/ognac/archive/2009/12/06/183569.aspx"&gt;例外に依存するロジックは駄目ですよ&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ほほぉ、なかなかに興味深い実験でございます。&lt;br&gt;&lt;br&gt;　「このケースのように、事前に対象データの絞り込みは言語で&lt;br&gt;　　行うほうが良いケースもあります。」&lt;/p&gt; &lt;p&gt;SQLわからんちんの僕には&lt;strong&gt;胸のすく思い&lt;/strong&gt;。&lt;br&gt;&lt;br&gt;もちっと速くなるかもしんないなーってんでちょいと実験です。&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;pre&gt;&lt;font color="#000000"&gt;
&lt;font color="#000000"&gt;&lt;b&gt;using&lt;/b&gt;&lt;/font&gt; System;
&lt;font color="#000000"&gt;&lt;b&gt;using&lt;/b&gt;&lt;/font&gt; System.Collections.Generic;
&lt;font color="#000000"&gt;&lt;b&gt;using&lt;/b&gt;&lt;/font&gt; System.Diagnostics;

&lt;font color="#000000"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; Program {

  &lt;font color="#000000"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;long&lt;/b&gt;&lt;/font&gt; AddUnique&amp;lt;T&amp;gt;(IEnumerable&amp;lt;T&amp;gt; src, ICollection&amp;lt;T&amp;gt; dst) {
    Stopwatch watch = Stopwatch.StartNew();
    foreach ( T item in src ) {
      &lt;font color="#000000"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; ( !dst.Contains(item) ) { &lt;font color="#000077"&gt;// 重複なければ&lt;/font&gt;
        dst.Add(item); &lt;font color="#000077"&gt;// 追加&lt;/font&gt;
      }
    }
    watch.Stop();
    &lt;font color="#000000"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; watch.ElapsedMilliseconds;
  }

  &lt;font color="#000000"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; Main() {
    &lt;font color="#000000"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; N = 100000; &lt;font color="#000077"&gt;// 要素数&lt;/font&gt;
    &lt;font color="#000000"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; M = 10000; &lt;font color="#000077"&gt;// 値の上限&lt;/font&gt;
    &lt;font color="#000077"&gt;// 元ネタ生成&lt;/font&gt;
    &lt;font color="#000000"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[] src = &lt;font color="#000000"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; &lt;font color="#000000"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;[N];
    var r = &lt;font color="#000000"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; Random();
    &lt;font color="#000000"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; ( &lt;font color="#000000"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; i = 0; i &amp;lt; N; ++i )src[i] = r.Next(M);
    &lt;font color="#000077"&gt;// 3つのCollectionで比べてみよう&lt;/font&gt;
    Console.WriteLine("LinkedList : {0}[ms]",AddUnique(src, &lt;b&gt;new&lt;/b&gt; LinkedList&amp;lt;&lt;b&gt;int&lt;/b&gt;&amp;gt;()));
    Console.WriteLine("List       : {0}[ms]",AddUnique(src, &lt;b&gt;new&lt;/b&gt; List&amp;lt;&lt;b&gt;int&lt;/b&gt;&amp;gt;()));
    Console.WriteLine("HashSet    : {0}[ms]",AddUnique(src, &lt;b&gt;new&lt;/b&gt; HashSet&amp;lt;&lt;b&gt;int&lt;/b&gt;&amp;gt;()));
  }
}
&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;実行結果:&lt;br&gt;&lt;font face="Courier New"&gt;LinkedList : 4729[ms]&lt;br&gt;List&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 3503[ms]&lt;br&gt;HashSet&amp;nbsp;&amp;nbsp;&amp;nbsp; : 17[ms]&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;strong&gt;Hashすげー&lt;/strong&gt;。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/183571.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>パーシャルクラスに対する一抹の不安</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/09/09/181035.aspx</link><pubDate>Wed, 09 Sep 2009 21:43:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/09/09/181035.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/181035.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/09/09/181035.aspx#Feedback</comments><slash:comments>38</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/181035.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/181035.aspx</trackback:ping><description>&lt;p&gt;ネタ元 → &lt;a href="http://blogs.wankuma.com/rti/archive/2009/09/09/181022.aspx"&gt;パーシャルクラスの使い道&lt;/a&gt;&lt;br&gt;&lt;br&gt;んだね。ひとつのクラスを複数のソースで記述できる。&lt;br&gt;C++屋に言わせてもらえば「なにをいまさらー」なワケです ^^;&lt;br&gt;C++では クラスの実装 = クラスの宣言 + Σ各メソッドの実装 ですからね。&lt;br&gt;&lt;br&gt;パーシャルクラス@C# と C++クラス の決定的な違いは、&lt;br&gt;C++ではクラスの宣言を分割できません。&lt;br&gt;なのでメソッドやフィールドを後付けでほいほい追加することはできず、&lt;br&gt;必ず宣言部(ヘッダ)をいぢくらにゃあきません。&lt;br&gt;&lt;br&gt;επι的には、パーシャルクラスには一抹の不安を覚えます。&lt;br&gt;というのも、ソースコードひとつ眺めてもそのクラスの全貌を知ることはできません。&lt;br&gt;そのクラスを実装する全ソースをかき集めないと全体像が見えない。&lt;br&gt;つまりはコンパイル済みのアセンブリからリフレクション使ってメタデータを&lt;br&gt;引っこ抜かないと全貌はわからんてことです。&lt;br&gt;# 片やC++ではヘッダ一本眺めれば、そのクラスの全貌が掴めます。&lt;br&gt;&lt;br&gt;ソースコードという、ヒトがコードを理解するのに最も単純でツブシの効く表現&lt;br&gt;だけでは全体像を掴めないってーとこに居心地の悪さみたいなものを感じますです。&lt;br&gt;プリントアウトをズラリと並べても”これで全部”という保証はどこにもないのですから。&lt;/p&gt;
&lt;p&gt;# 同様の居心地の悪さを拡張メソッドにも感じるわけなんだが&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/181035.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>επιστημη</dc:creator><title>こんなのもあっていいかなーと</title><link>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/09/02/180786.aspx</link><pubDate>Wed, 02 Sep 2009 10:59:00 GMT</pubDate><guid>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/09/02/180786.aspx</guid><wfw:comment>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/180786.aspx</wfw:comment><comments>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/archive/2009/09/02/180786.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/comments/commentRss/180786.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/services/trackbacks/180786.aspx</trackback:ping><description>&lt;P&gt;おあそびですよ、おあそび。&lt;BR&gt;&lt;BR&gt;&lt;FONT size=2 face="Courier New"&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;using Wankuma.Extensions;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;namespace Wankuma.Extensions {&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;&amp;nbsp; public static class SystemExtensions {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// 初項:initial 公差:stride 項数:count の等差数列&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static IEnumerable&amp;lt;int&amp;gt; Sequence(this int count, int initial, int stride) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( int i = 0; i &amp;lt; count; ++i ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield return initial;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initial += stride;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // initialから1刻みにcount個&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2 face="Courier New"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static IEnumerable&amp;lt;int&amp;gt; Sequence(this int count, int initial) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return count.Sequence(initial,1);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 0からcount-1まで&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static IEnumerable&amp;lt;int&amp;gt; Sequence(this int count) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return count.Sequence(0,1);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;&lt;FONT color=#008000&gt;// こーやって使う&lt;/FONT&gt;&lt;BR&gt;public class Program {&lt;BR&gt;&amp;nbsp; public static void Main() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// 初項2, 公差3 で 5つ。&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ( int n in 5.Sequence(2,3) ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Write("{0} ", n);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 要素数10コ、ぜんぶ-1で埋める&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;int&amp;gt; array = new List&amp;lt;int&amp;gt;(10.Sequence(-1,0));&lt;/FONT&gt;&lt;FONT size=2 face="Courier New"&gt;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src ="http://blogs.wankuma.com/ｅｐｉｓｔｅｍｅ/aggbug/180786.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>