<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Danie Bruwer</title><link>http://dotnet.org.za/danieb/default.aspx</link><description>C# ASP.NET Development</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Styling an HTML table to avoid rowspans</title><link>http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx</link><pubDate>Wed, 26 Nov 2008 07:41:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:882129</guid><dc:creator>danieb</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=882129</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Generating HTML tables with rowspan’s can be a tricky business. I recently worked on a some XSLT that was transforming some data into an html table. As you can see from the sample below its sort of a tree grid.&lt;/p&gt;  &lt;p&gt;The problem with rowspans are that when you expand and collapse (hide and show rows) the table displays incorrectly.Also changing the rowspan when expanding and collapsing to ensure that it displays correctly is virtually impossible. &lt;/p&gt;  &lt;p&gt;I figured out a trick to create virtual rowspans that will seem that the cell spans multiple rows. The only downside here is that the merged cell cannot be aligned to the middle of the cell, but is always top aligned.&lt;/p&gt;  &lt;p&gt;So basically the trick is to specify the following:&lt;/p&gt;  &lt;p&gt;First specify that the table borders should &lt;b&gt;collapse&lt;/b&gt;.&lt;/p&gt;  &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;line-height:12pt;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;max-height:200px;font-size:8pt;cursor:text;"&gt;   &lt;div style="border-style:none;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;     &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   1:&lt;/span&gt; #table1&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   3:&lt;/span&gt;     &lt;span&gt;border-color&lt;/span&gt;: &lt;span&gt;Silver;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   4:&lt;/span&gt;     &lt;span&gt;border&lt;/span&gt;: &lt;span&gt;solid 1px silver;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   5:&lt;/span&gt;     &lt;span&gt;border&lt;/span&gt;-&lt;span&gt;bottom&lt;/span&gt;: &lt;span&gt;solid 1px silver;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   6:&lt;/span&gt;     &lt;b&gt;&lt;span&gt;border-collapse&lt;/span&gt;: &lt;span&gt;collapse;&lt;/span&gt;&lt;/b&gt;            &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   7:&lt;/span&gt;     &lt;span&gt;width&lt;/span&gt;: &lt;span&gt;600px;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   8:&lt;/span&gt;     &lt;span&gt;font-family&lt;/span&gt;: &lt;span&gt;Calibri;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   9:&lt;/span&gt;     &lt;span&gt;font-size&lt;/span&gt;: &lt;span&gt;smaller;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then for the table cell’s and headers. Notice that the &lt;b&gt;bottom border is 0px&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;line-height:12pt;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;max-height:200px;font-size:8pt;cursor:text;"&gt;
  &lt;div style="border-style:none;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;
    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   1:&lt;/span&gt; #table1 &lt;span&gt;td&lt;/span&gt;, #table1 &lt;span&gt;th&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   3:&lt;/span&gt;     &lt;span&gt;border&lt;/span&gt;: &lt;span&gt;solid 1px silver;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   4:&lt;/span&gt;     &lt;b&gt;&lt;span&gt;border&lt;/span&gt;-&lt;span&gt;bottom&lt;/span&gt;: &lt;span&gt;none 0px;&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   5:&lt;/span&gt;     &lt;span&gt;padding&lt;/span&gt;-&lt;span&gt;left&lt;/span&gt;: &lt;span&gt;2px;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Then finally we need to specify the style class for an empty cell.&lt;/p&gt;

&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;line-height:12pt;width:97.5%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;max-height:200px;font-size:8pt;cursor:text;"&gt;
  &lt;div style="border-style:none;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;
    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   1:&lt;/span&gt; #table1 &lt;span&gt;td&lt;/span&gt;&lt;span&gt;.emptycell&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;background-color:white;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   3:&lt;/span&gt;     &lt;span&gt;border&lt;/span&gt;: &lt;span&gt;0px;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;line-height:12pt;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;color:black;font-size:8pt;"&gt;&lt;span&gt;   4:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And here’s a Screenshot of the table. You can view the source &lt;a href="http://dotnet.org.za/blogs/danieb/Table.txt"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dotnet.org.za/blogs/danieb/Table_I9Kd6g.jpg"&gt;&lt;img src="http://dotnet.org.za/blogs/danieb/Table_thumb_abPCug.jpg" style="border:0px none;" title="Table" alt="Table" border="0" width="644" height="462" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx&amp;amp;;subject=Styling+an+HTML+table+to+avoid+rowspans" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx&amp;amp;;title=Styling+an+HTML+table+to+avoid+rowspans" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx&amp;amp;title=Styling+an+HTML+table+to+avoid+rowspans" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx&amp;amp;;title=Styling+an+HTML+table+to+avoid+rowspans" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx&amp;amp;;title=Styling+an+HTML+table+to+avoid+rowspans&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/11/26/styling-a-html-table-to-avoid-rowspan-s.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=882129" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/danieb/archive/tags/CSS/default.aspx">CSS</category><category domain="http://dotnet.org.za/danieb/archive/tags/HTML/default.aspx">HTML</category></item><item><title>Javascript Querystring Class Version 1.4</title><link>http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx</link><pubDate>Tue, 26 Aug 2008 08:58:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:549111</guid><dc:creator>danieb</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=549111</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx#comments</comments><description>&lt;p&gt;The updated version of the &lt;a href="http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;original JavaScript Querystring class&lt;/a&gt;. &lt;/p&gt;  &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;   &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;     &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   1:&lt;/span&gt; &lt;span&gt;// &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   2:&lt;/span&gt; &lt;span&gt;//    ------------------------------------------------------------------------&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   3:&lt;/span&gt; &lt;span&gt;//    Modified by Danie Bruwer  2008/08/26&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   4:&lt;/span&gt; &lt;span&gt;//    http://dotnet.org.za/danieb&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   5:&lt;/span&gt; &lt;span&gt;//    New in Version 1.4&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   6:&lt;/span&gt; &lt;span&gt;//    * Chainable&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   7:&lt;/span&gt; &lt;span&gt;//    ------------------------------------------------------------------------&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   8:&lt;/span&gt; &lt;span&gt;//    Original File :&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   9:&lt;/span&gt; &lt;span&gt;//    http://adamv.com/dev/javascript/querystring&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  10:&lt;/span&gt; &lt;span&gt;//    Client-side access to querystring name=value pairs&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  11:&lt;/span&gt; &lt;span&gt;//      Version 1.3&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  12:&lt;/span&gt; &lt;span&gt;//       28 May 2008    &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  13:&lt;/span&gt; &lt;span&gt;//      License (Simplified BSD):&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  14:&lt;/span&gt; &lt;span&gt;//      http://adamv.com/dev/javascript/qslicense.txt    &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  16:&lt;/span&gt; &lt;span&gt;function&lt;/span&gt; $Querystring(qs) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  17:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; &lt;span&gt;new&lt;/span&gt; Querystring(qs);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  18:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  19:&lt;/span&gt; &lt;span&gt;function&lt;/span&gt; Querystring(qs) { &lt;span&gt;// optionally pass a querystring to parse&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  20:&lt;/span&gt;     &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt; = {};&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  21:&lt;/span&gt;     &lt;span&gt;this&lt;/span&gt;.keys = &lt;span&gt;new&lt;/span&gt; Array();&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  22:&lt;/span&gt;     &lt;span&gt;this&lt;/span&gt;.path = (qs &amp;amp;&amp;amp; qs.indexOf(&lt;span&gt;&amp;#39;?&amp;#39;&lt;/span&gt;) &amp;gt; 0) ? qs.split(&lt;span&gt;&amp;#39;?&amp;#39;&lt;/span&gt;)[0] : location.protocol +location.host + location.pathname;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  23:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  24:&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; (qs == &lt;span&gt;null&lt;/span&gt;) qs = location.search.substring(1, location.search.length);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  25:&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; (qs.length == 0) &lt;span&gt;return&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  26:&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; (qs.indexOf(&lt;span&gt;&amp;#39;?&amp;#39;&lt;/span&gt;) &amp;gt; 0)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  27:&lt;/span&gt;         qs = qs.split(&lt;span&gt;&amp;#39;?&amp;#39;&lt;/span&gt;)[1];&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  28:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  29:&lt;/span&gt;     &lt;span&gt;// Turn &amp;lt;plus&amp;gt; back to &amp;lt;space&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  30:&lt;/span&gt;     &lt;span&gt;// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  31:&lt;/span&gt;     qs = qs.replace(/\+/g, &lt;span&gt;&amp;#39; &amp;#39;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  32:&lt;/span&gt;     &lt;span&gt;var&lt;/span&gt; args = qs.split(&lt;span&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;); &lt;span&gt;// parse out name/value pairs separated via &amp;amp;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  33:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  34:&lt;/span&gt;     &lt;span&gt;// split out each name=value pair&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  35:&lt;/span&gt;     &lt;span&gt;for&lt;/span&gt; (&lt;span&gt;var&lt;/span&gt; i = 0; i &amp;lt; args.length; i++) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  36:&lt;/span&gt;         &lt;span&gt;var&lt;/span&gt; pair = args&lt;img src="http://dotnet.org.za/emoticons/emotion-55.gif" alt="Idea" /&gt;.split(&lt;span&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  37:&lt;/span&gt;         &lt;span&gt;var&lt;/span&gt; name = decodeURIComponent(pair[0]);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  38:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  39:&lt;/span&gt;         &lt;span&gt;var&lt;/span&gt; value = (pair.length==2)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  40:&lt;/span&gt;             ? decodeURIComponent(pair[1])&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  41:&lt;/span&gt;             : name;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  42:&lt;/span&gt;             &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  43:&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.keys&lt;img src="http://dotnet.org.za/emoticons/emotion-55.gif" alt="Idea" /&gt; = name;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  44:&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt;[name] = value;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  45:&lt;/span&gt;     }        &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  46:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  47:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  48:&lt;/span&gt; Querystring.prototype.get = &lt;span&gt;function&lt;/span&gt;(key, default_) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  49:&lt;/span&gt;     &lt;span&gt;var&lt;/span&gt; value = &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt;[key];&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  50:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; (value != &lt;span&gt;null&lt;/span&gt;) ? value : default_;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  51:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  52:&lt;/span&gt; Querystring.prototype.set = &lt;span&gt;function&lt;/span&gt;(key, value) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  53:&lt;/span&gt;     value = encodeURI(value);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  54:&lt;/span&gt;     &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt;[key] = value;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  55:&lt;/span&gt;     &lt;span&gt;var&lt;/span&gt; index = &lt;span&gt;this&lt;/span&gt;.indexOfKey(key);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  56:&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; (index &amp;lt; 0)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  57:&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.keys[&lt;span&gt;this&lt;/span&gt;.keys.length] = key;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  58:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  59:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  60:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  61:&lt;/span&gt; Querystring.prototype.indexOfKey = &lt;span&gt;function&lt;/span&gt;(key) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  62:&lt;/span&gt;     &lt;span&gt;for&lt;/span&gt; (&lt;span&gt;var&lt;/span&gt; i = 0; i &amp;lt; &lt;span&gt;this&lt;/span&gt;.keys.length; i++) &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  63:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  64:&lt;/span&gt;         &lt;span&gt;if&lt;/span&gt;(&lt;span&gt;this&lt;/span&gt;.keys&lt;img src="http://dotnet.org.za/emoticons/emotion-55.gif" alt="Idea" /&gt; == key)&lt;/pre&gt;


    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  65:&lt;/span&gt;             &lt;span&gt;return&lt;/span&gt; i;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  66:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  67:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; -1;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  68:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  69:&lt;/span&gt; Querystring.prototype.remove = &lt;span&gt;function&lt;/span&gt;(key) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  70:&lt;/span&gt;     &lt;span&gt;var&lt;/span&gt; index = &lt;span&gt;this&lt;/span&gt;.indexOfKey(key);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  71:&lt;/span&gt;     &lt;span&gt;if&lt;/span&gt; (index &amp;gt;= 0) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  72:&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt;[key] = &lt;span&gt;null&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  73:&lt;/span&gt;         &lt;span&gt;this&lt;/span&gt;.keys.splice(index, 1);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  74:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  75:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  76:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  77:&lt;/span&gt; Querystring.prototype.toString = &lt;span&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  78:&lt;/span&gt;     &lt;span&gt;var&lt;/span&gt; ret = &lt;span&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  79:&lt;/span&gt;     &lt;span&gt;for&lt;/span&gt; (&lt;span&gt;var&lt;/span&gt; i = 0; i &amp;lt; &lt;span&gt;this&lt;/span&gt;.keys.length; i++) &lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  80:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  81:&lt;/span&gt;         &lt;span&gt;if&lt;/span&gt;(&lt;span&gt;this&lt;/span&gt;.keys&lt;img src="http://dotnet.org.za/emoticons/emotion-55.gif" alt="Idea" /&gt;)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  82:&lt;/span&gt;             ret += ((i == 0) ? &lt;span&gt;&amp;quot;?&amp;quot;&lt;/span&gt; : &lt;span&gt;&amp;quot;&amp;amp;&amp;quot;&lt;/span&gt;) + &lt;span&gt;this&lt;/span&gt;.keys&lt;img src="http://dotnet.org.za/emoticons/emotion-55.gif" alt="Idea" /&gt; + &lt;span&gt;&amp;quot;=&amp;quot;&lt;/span&gt; + &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt;[&lt;span&gt;this&lt;/span&gt;.keys&lt;img src="http://dotnet.org.za/emoticons/emotion-55.gif" alt="Idea" /&gt;];&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  83:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  84:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; ret;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  85:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  86:&lt;/span&gt; Querystring.prototype.getAbsolutePath = &lt;span&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  87:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;.path;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  88:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  89:&lt;/span&gt; Querystring.prototype.toAbsoluteUrl = &lt;span&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  90:&lt;/span&gt;    &lt;span&gt;return&lt;/span&gt; &lt;span&gt;this&lt;/span&gt;.path + &lt;span&gt;this&lt;/span&gt;.toString();&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  91:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  92:&lt;/span&gt; Querystring.prototype.contains = &lt;span&gt;function&lt;/span&gt;(key) {&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  93:&lt;/span&gt;     &lt;span&gt;var&lt;/span&gt; value = &lt;span&gt;this&lt;/span&gt;.&lt;span&gt;params&lt;/span&gt;[key];&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  94:&lt;/span&gt;     &lt;span&gt;return&lt;/span&gt; (value != &lt;span&gt;null&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  95:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;New in Version 1.4. Chainable :&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
  &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;
    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   1:&lt;/span&gt; alert($Querystring().set(&lt;span&gt;&amp;quot;search&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;changed&amp;quot;&lt;/span&gt;).toString());&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   2:&lt;/span&gt; alert($Querystring().set(&lt;span&gt;&amp;quot;search&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;changed&amp;quot;&lt;/span&gt;).set(&lt;span&gt;&amp;quot;page&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;1&amp;quot;&lt;/span&gt;).indexOfKey(&lt;span&gt;&amp;quot;page&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   3:&lt;/span&gt; alert($Querystring().set(&lt;span&gt;&amp;quot;search&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;changed&amp;quot;&lt;/span&gt;).set(&lt;span&gt;&amp;quot;page&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;1&amp;quot;&lt;/span&gt;).set(&lt;span&gt;&amp;quot;search&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;changed again&amp;quot;&lt;/span&gt;).toAbsoluteUrl());&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   4:&lt;/span&gt; alert($Querystring(&lt;span&gt;&amp;quot;http://www.test.com?search=searchtext&amp;amp;page=1&amp;quot;&lt;/span&gt;).set(&lt;span&gt;&amp;quot;search&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;changed&amp;quot;&lt;/span&gt;).set(&lt;span&gt;&amp;quot;page&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;2&amp;quot;&lt;/span&gt;).toAbsoluteUrl());&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dotnet.org.za/blogs/danieb/Querystring.1.4.js.txt"&gt;Download the source&lt;/a&gt;.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx&amp;amp;;subject=Javascript+Querystring+Class+Version+1.4" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx&amp;amp;;title=Javascript+Querystring+Class+Version+1.4" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx&amp;amp;title=Javascript+Querystring+Class+Version+1.4" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx&amp;amp;;title=Javascript+Querystring+Class+Version+1.4" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx&amp;amp;;title=Javascript+Querystring+Class+Version+1.4&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=549111" width="1" height="1"&gt;</description></item><item><title>Javascript Querystring Class </title><link>http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx</link><pubDate>Wed, 06 Aug 2008 11:45:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:513201</guid><dc:creator>danieb</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=513201</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx#comments</comments><description>&lt;p&gt;I have always found it difficult to manipulate querystring client side. So i searched for a javascript querystring helper class and found this &lt;a href="http://adamv.com/dev/javascript/querystring"&gt;class&lt;/a&gt; by &lt;a href="http://adamv.com/"&gt;Adam Vandenberg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I added a couple methods that you may find usefull.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s a couple examples on how to use the &lt;a href="http://dotnet.org.za/blogs/danieb/Querystring.js.txt"&gt;enhanced class&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;var qs = new Querystring();&lt;br /&gt;qs.set(&amp;quot;search&amp;quot;, &amp;quot;changed&amp;quot;);&lt;br /&gt;alert(qs.get(&amp;quot;search&amp;quot;));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;alert(qs.toString());&lt;br /&gt;alert(qs.indexOfKey(&amp;quot;search&amp;quot;));&lt;br /&gt;alert(qs.toAbsoluteUrl());&lt;br /&gt;alert(&amp;quot;Removed search : &amp;quot; + qs.remove(&amp;quot;search&amp;quot;));&lt;br /&gt;alert(&amp;quot;Removed search : &amp;quot; + qs.remove(&amp;quot;search&amp;quot;));&lt;br /&gt;qs.set(&amp;quot;search&amp;quot;, &amp;quot;search added with some empty spaces&amp;quot;);&lt;br /&gt;alert(qs.toAbsoluteUrl());&lt;br /&gt;&lt;br /&gt;var qs2 = new Querystring(&amp;quot;http://www.test.com?search=searchtext&amp;amp;page=1&amp;quot;)&lt;br /&gt;alert(qs2.toString()); &lt;br /&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx&amp;amp;;subject=Javascript+Querystring+Class+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx&amp;amp;;title=Javascript+Querystring+Class+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx&amp;amp;title=Javascript+Querystring+Class+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx&amp;amp;;title=Javascript+Querystring+Class+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx&amp;amp;;title=Javascript+Querystring+Class+&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=513201" width="1" height="1"&gt;</description></item><item><title>ListItemCollection.SyncToList</title><link>http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx</link><pubDate>Wed, 09 Jan 2008 22:16:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:274535</guid><dc:creator>danieb</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=274535</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx#comments</comments><description>&lt;p&gt;Here&amp;#39;s a example that uses &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx" target="_blank"&gt;extension methods&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/04/08/new-orcas-language-feature-lambda-expressions.aspx" target="_blank"&gt;lambda expressions&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/04/08/new-orcas-language-feature-lambda-expressions.aspx" target="_blank"&gt;anonymous methods&lt;/a&gt; to synchronize values from a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.listitemcollection.aspx" target="_blank"&gt;ListItemCollection&lt;/a&gt; to a EntityList (Linq to SQL).&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR:gray;"&gt;/// &amp;lt;summary&amp;gt; &lt;br /&gt;/// &lt;/span&gt;&lt;span style="COLOR:green;"&gt;This is used to easily bind a CheckBoxList to a EntitySet &lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;/// &amp;lt;/summary&amp;gt; &lt;br /&gt;/// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/typeparam&amp;gt; &lt;br /&gt;/// &amp;lt;param name=&amp;quot;items&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;List of items to Sync &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt; &lt;br /&gt;/// &amp;lt;param name=&amp;quot;list&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;EntitySet to Remove from&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt; &lt;br /&gt;/// &amp;lt;param name=&amp;quot;selected&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Method to Find&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt; &lt;br /&gt;/// &amp;lt;param name=&amp;quot;create&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Method to Create a New Instance of T from a ListItem&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt; &lt;br /&gt;/// &amp;lt;param name=&amp;quot;delete&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Method to Delete T&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public static void &lt;/span&gt;SyncToList&amp;lt;T&amp;gt;(&lt;span style="COLOR:blue;"&gt;this &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;ListItemCollection &lt;/span&gt;items &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;span style="COLOR:#2b91af;"&gt;EntitySet&lt;/span&gt;&amp;lt;T&amp;gt; list &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="COLOR:#2b91af;"&gt;ListItem&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt;&amp;gt; selected &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;ListItem&lt;/span&gt;, T&amp;gt; create &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt;&amp;gt; delete) &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;where &lt;/span&gt;T : &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;() &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;ListItem &lt;/span&gt;item &lt;span style="COLOR:blue;"&gt;in &lt;/span&gt;items) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T litem = list.FirstOrDefault(p =&amp;gt; selected.Invoke(p, item)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if &lt;/span&gt;(item.Selected &amp;amp;&amp;amp; litem == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; litem = create.Invoke(item); &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; list.Add(litem);&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;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&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; &lt;span style="COLOR:blue;"&gt;else if&lt;/span&gt;(!item.Selected &amp;amp;&amp;amp;&amp;nbsp;litem != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt;(delete != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &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; delete.Invoke(litem); &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; list.Remove(litem);&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; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Example (Linq to SQL):&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.chkl_Clients.Items.SyncToList&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;UserClient&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.User.UsersClients,&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;&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;br /&gt;&lt;span style="COLOR:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;UserClient &lt;/span&gt;u, &lt;span style="COLOR:#2b91af;"&gt;ListItem &lt;/span&gt;i) &lt;br /&gt;{&lt;span style="COLOR:green;"&gt;//Selected &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;u.ClientId == &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;.Parse(i.Value); },&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="COLOR:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;ListItem &lt;/span&gt;l) &lt;br /&gt;{&lt;span style="COLOR:green;"&gt;//Create &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;UserClient &lt;/span&gt;u = &lt;span style="COLOR:blue;"&gt;new &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;UserClient&lt;/span&gt;(); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u.UserId = &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.User.UserId; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; u.ClientId = &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;.Parse(l.Value); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;u; &lt;br /&gt;} &lt;br /&gt;,&lt;span style="COLOR:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;UserClient &lt;/span&gt;u) &lt;br /&gt;{&lt;span style="COLOR:green;"&gt;//Delete &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Factory&lt;/span&gt;.DataContext.UsersClients.DeleteOnSubmit(u); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return true&lt;/span&gt;; &lt;br /&gt;} &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; &lt;br /&gt;DataContext.SubmitChanges();&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx&amp;amp;;subject=ListItemCollection.SyncToList" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx&amp;amp;;title=ListItemCollection.SyncToList" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx&amp;amp;title=ListItemCollection.SyncToList" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx&amp;amp;;title=ListItemCollection.SyncToList" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx&amp;amp;;title=ListItemCollection.SyncToList&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=274535" width="1" height="1"&gt;</description></item><item><title>ListItemCollection.SelectByValue, SelectByText</title><link>http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx</link><pubDate>Wed, 09 Jan 2008 21:42:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:274506</guid><dc:creator>danieb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=274506</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx#comments</comments><description>&lt;pre class="code"&gt;I found a very easy way to select items in a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.listitemcollection.aspx" target="_blank"&gt;ListItemCollection&lt;/a&gt; &lt;br /&gt;using &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx" target="_blank"&gt;Extension Methods&lt;/a&gt;, &lt;a href="http://msdn2.microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx" target="_blank"&gt;Anonymous Methods&lt;/a&gt; and &lt;a class="" href="http://weblogs.asp.net/scottgu/archive/2007/04/08/new-orcas-language-feature-lambda-expressions.aspx" target="_blank"&gt;Lambda Expressions&lt;/a&gt;.&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="COLOR:gray;"&gt; /// &amp;lt;summary&amp;gt;
 /// &lt;/span&gt;&lt;span style="COLOR:green;"&gt;This will select the items in a ChekboxList, ListBox
 &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;/// &amp;lt;/summary&amp;gt;
 /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Type of items&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/typeparam&amp;gt;
 /// &amp;lt;param name=&amp;quot;items&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Source&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
 /// &amp;lt;param name=&amp;quot;selectionList&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Selected items&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
 /// &amp;lt;param name=&amp;quot;property&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Expression to select items&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
 &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public static void &lt;/span&gt;SelectByValue&amp;lt;T&amp;gt;(&lt;span style="COLOR:blue;"&gt;this &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;ListItemCollection &lt;/span&gt;items&lt;br /&gt;                                    ,&lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; selectionList&lt;br /&gt;                                    , &lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;&amp;gt; property)
     &lt;span style="COLOR:blue;"&gt;where &lt;/span&gt;T : &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;()
 {
     &lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;ListItem &lt;/span&gt;i = items)&lt;br /&gt;           &lt;font size="2"&gt;i.Selected = selectionList.FirstOrDefault(&lt;br /&gt;              p =&amp;gt; property.Invoke(p) == i.Value) !=&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;;                 
 }
 &lt;span style="COLOR:gray;"&gt;/// &amp;lt;summary&amp;gt;
 /// &lt;/span&gt;&lt;span style="COLOR:green;"&gt;This will select the items in a ChekboxList, ListBox
 &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;/// &amp;lt;/summary&amp;gt;
 /// &amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Type of items&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/typeparam&amp;gt;
 /// &amp;lt;param name=&amp;quot;items&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Source&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
 /// &amp;lt;param name=&amp;quot;selectionList&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Selected items&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
 /// &amp;lt;param name=&amp;quot;property&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="COLOR:green;"&gt;Expression to select items&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/param&amp;gt;
 &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public static void &lt;/span&gt;SelectByText&amp;lt;T&amp;gt;(&lt;span style="COLOR:blue;"&gt;this &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;ListItemCollection &lt;/span&gt;items&lt;br /&gt;                                    , &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;T&amp;gt; selectionList&lt;br /&gt;                                    , &lt;span style="COLOR:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T, &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;&amp;gt; property)
     &lt;span style="COLOR:blue;"&gt;where &lt;/span&gt;T : &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt;()
 {&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;      foreach&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;ListItem &lt;/span&gt;i = items)&lt;br /&gt;           &lt;font size="2"&gt;i.Selected = selectionList.FirstOrDefault(&lt;br /&gt;                      p =&amp;gt; property.Invoke(p) == i.Text) !=&lt;/font&gt; &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;;  
 }&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;Here&amp;#39;s an example :&lt;/pre&gt;&lt;pre class="code"&gt;chkl_Roles.Items.SelectByValue&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Role&lt;/span&gt;&amp;gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.User.Roles,&lt;br /&gt; &lt;span style="COLOR:blue;"&gt;delegate&lt;/span&gt;(&lt;span style="COLOR:#2b91af;"&gt;Role &lt;/span&gt;r) { &lt;span style="COLOR:blue;"&gt;return &lt;/span&gt;r.RoleId.ToString(); });&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx&amp;amp;;subject=ListItemCollection.SelectByValue%2c+SelectByText" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx&amp;amp;;title=ListItemCollection.SelectByValue%2c+SelectByText" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx&amp;amp;title=ListItemCollection.SelectByValue%2c+SelectByText" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx&amp;amp;;title=ListItemCollection.SelectByValue%2c+SelectByText" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx&amp;amp;;title=ListItemCollection.SelectByValue%2c+SelectByText&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=274506" width="1" height="1"&gt;</description></item><item><title>The Worst Bug Ever</title><link>http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx</link><pubDate>Mon, 26 Nov 2007 04:24:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:242736</guid><dc:creator>danieb</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=242736</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx#comments</comments><description>&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;I do support on a SharePoint Portal (2003, Framework 1.1). Last week after we deployed some new functionality we started to get very strange errors. The portal would just break at random arbitrary functions. I traced the root cause to the following warning in the System Event Log:&lt;/font&gt;&lt;/p&gt;&lt;span style="COLOR:red;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;A process serving application pool &amp;#39;X&amp;#39; suffered a fatal communication error with the World Wide Web Publishing Service. The process id was &amp;#39;X&amp;#39;. The data field contains the error number.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;After investigating the application log for hours, days I found nothing but errors caused by the chain reaction of error in the application log. However we would receive this error quite often.&lt;/font&gt;&lt;/p&gt;&lt;span style="COLOR:red;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Common Language Runtime detected an invalid program.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Then eventually it logged an error that basically said that it’s failing to compile a temporary file. &lt;/font&gt;&lt;/p&gt;&lt;span style="COLOR:red;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Cannot execute a program. The command being executed was &amp;quot;c:\windows\microsoft.net\framework\v1.1.4322\csc.exe&amp;quot; /noconfig @&amp;quot;C:\WINDOWS\TEMP\lannijk8.cmdline&amp;quot;.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Thinking I had found the problem I delete the windows temp and the Asp.net temp directories. However a couple hours later the error was back, but not logging the Compile issue, only the warning in the system event log. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Googling the errors, didn’t return anything that made any sense.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Eventually we figured out (after reading this &lt;/font&gt;&lt;a href="http://blogs.msdn.com/mjeelani/archive/2006/12/09/common-language-runtime-detected-an-invalid-program-invalidprogramexception-when-your-application-has-a-really-large-method.aspx"&gt;&lt;font face="Calibri" size="3"&gt;article&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri" size="3"&gt;) that when I added an extra Web Method to an existing web service, the generated Web Service had too many local variables. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;I don’t know what the exact number is for .net 1.1 but for 2.0 its 32767, which is really a lot. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;See .net declares a local variable for each method and parameter in your web service and compiles this class. &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;So we resolved the issue by removing some of the web methods, but if this is not an option t&lt;span style="COLOR:black;mso-bidi-font-family:Arial;"&gt;here&amp;#39;s a &lt;a title="http://support.microsoft.com/kb/312544" href="http://support.microsoft.com/kb/312544"&gt;hotfix available&lt;/a&gt; to raise that limit to 4 million.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx&amp;amp;;subject=The+Worst+Bug+Ever" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx&amp;amp;;title=The+Worst+Bug+Ever" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx&amp;amp;title=The+Worst+Bug+Ever" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx&amp;amp;;title=The+Worst+Bug+Ever" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx&amp;amp;;title=The+Worst+Bug+Ever&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=242736" width="1" height="1"&gt;</description></item><item><title>Using Generics, Anonymous Methods and Delegates to join.</title><link>http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx</link><pubDate>Tue, 20 Nov 2007 14:54:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:242700</guid><dc:creator>danieb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=242700</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx#comments</comments><description>&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; Delegate used to in Join&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;param name=&amp;quot;obj&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:blue;"&gt;delegate&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;object&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;JoinDelegate&lt;/span&gt;&amp;lt;T&amp;gt;(T obj);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; Anonymous Method Delegate Join&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;param name=&amp;quot;items&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;param name=&amp;quot;join&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;param name=&amp;quot;delimiter&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;///&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:gray;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; Join&amp;lt;T&amp;gt;(&lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt; items, &lt;span style="COLOR:#2b91af;"&gt;JoinDelegate&lt;/span&gt;&amp;lt;T&amp;gt; join, &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; delimiter)&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringWriter&lt;/span&gt; sw = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;StringWriter&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt; firstTime = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt; (T t &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; items)&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (firstTime)&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&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;firstTime = &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&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;sw.Write(delimiter);&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sw.Write(join.Invoke(t));&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; sw.ToString();&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:blue;"&gt;struct&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; StructTest(&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; ID){&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.id = ID;}&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; id;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;[&lt;span style="COLOR:#2b91af;"&gt;TestMethod&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; Test_GenericJoin()&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;/span&gt;[] items = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;/span&gt;[] { &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;),&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;/span&gt;(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;) };&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; result = &lt;span style="COLOR:#2b91af;"&gt;StringHelper&lt;/span&gt;.Join&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;/span&gt;&amp;gt;(items,&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;&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 style="COLOR:blue;"&gt;delegate&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;StructTest&lt;/span&gt; item) &lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;{&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; item.id;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;});&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;1,2&amp;quot;&lt;/span&gt;, result);&lt;/span&gt; 
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx&amp;amp;;subject=Using+Generics%2c+Anonymous+Methods+and+Delegates+to+join." target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx&amp;amp;;title=Using+Generics%2c+Anonymous+Methods+and+Delegates+to+join." target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx&amp;amp;title=Using+Generics%2c+Anonymous+Methods+and+Delegates+to+join." target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx&amp;amp;;title=Using+Generics%2c+Anonymous+Methods+and+Delegates+to+join." target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx&amp;amp;;title=Using+Generics%2c+Anonymous+Methods+and+Delegates+to+join.&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=242700" width="1" height="1"&gt;</description></item><item><title>Custom Ajax Controls</title><link>http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx</link><pubDate>Mon, 11 Jun 2007 09:30:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:184367</guid><dc:creator>danieb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=184367</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx#comments</comments><description>&lt;p&gt;I have uploaded a demo of some custom AJAX controls we&amp;#39;ve pieced together. 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;DropDownList with paging
&lt;/li&gt;&lt;li&gt;ImageDropdown with paging
&lt;/li&gt;&lt;li&gt;Holiday support for the Calendar Control
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Check out the &lt;a href="http://dotnet.org.za/codesamples/danieb/AjaxControlToolKit.Tests/Default.aspx"&gt;sample&lt;/a&gt; and download the &lt;a href="http://dotnet.org.za/files/folders/source/entry184803.aspx"&gt;source code&lt;/a&gt;.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx&amp;amp;;subject=Custom+Ajax+Controls" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx&amp;amp;;title=Custom+Ajax+Controls" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx&amp;amp;title=Custom+Ajax+Controls" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx&amp;amp;;title=Custom+Ajax+Controls" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx&amp;amp;;title=Custom+Ajax+Controls&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=184367" width="1" height="1"&gt;</description></item><item><title>Publishing Code from Word 2007</title><link>http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx</link><pubDate>Wed, 06 Jun 2007 16:59:24 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:182848</guid><dc:creator>danieb</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=182848</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx#comments</comments><description>&lt;p&gt;I found a way to trick word in publishing code with the correct format and spacing.
&lt;/p&gt;&lt;p&gt;You can do a find replace on:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&amp;quot;^p&amp;quot; (paragraph) with &amp;quot;^l&amp;quot; (newline)  
&lt;/li&gt;&lt;li&gt;&amp;quot;   &amp;quot; (4 spaces) with &amp;quot;^t&amp;quot; (tab)  
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I don&amp;#39;t know if there is a better way but this works quite well check the beautiful formatting &lt;a href="http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx&amp;amp;;subject=Publishing+Code+from+Word+2007" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx&amp;amp;;title=Publishing+Code+from+Word+2007" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx&amp;amp;title=Publishing+Code+from+Word+2007" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx&amp;amp;;title=Publishing+Code+from+Word+2007" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx&amp;amp;;title=Publishing+Code+from+Word+2007&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=182848" width="1" height="1"&gt;</description></item><item><title>To yield, or not to yield</title><link>http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx</link><pubDate>Wed, 06 Jun 2007 15:43:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:182601</guid><dc:creator>danieb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=182601</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx#comments</comments><description>&lt;p&gt;&lt;br /&gt;I must say the yield keyword new in 2.0 is one of my favourites. &lt;br /&gt;How I would best explain it best is that it iterates on demand.&lt;br /&gt;Here is a very cool enumerator I wrote for our Exception Handler class.&lt;br /&gt;Download the sourcecode &lt;a class="" href="http://dotnet.org.za/files/folders/source/entry184983.aspx"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; Enumerate the exception and the inner exceptions&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR:gray;"&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;param name=&amp;quot;ex&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;///&lt;/span&gt;&lt;span style="COLOR:green;"&gt; &lt;/span&gt;&lt;span style="COLOR:gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;Exception&lt;/span&gt;&amp;gt; GetEnumerator(&lt;span style="COLOR:#2b91af;"&gt;Exception&lt;/span&gt; ex)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Exception&lt;/span&gt; tmp = ex;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;while&lt;/span&gt; (tmp != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Exception&lt;/span&gt; toYield = tmp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmp = tmp.InnerException;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;BACKGROUND-COLOR:yellow;"&gt;yield&lt;/span&gt;&lt;span style="BACKGROUND-COLOR:yellow;"&gt; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; toYield;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;This made searching for specific exception type or formatting our exceptions much more elegant and faster in theory &lt;br /&gt;(I say in theory since I don&amp;#39;t think iterating thru exceptions is very CPU intensive!).&lt;br /&gt;This small console app just illustrates the &lt;em&gt;iteration on demand&lt;/em&gt;:&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Program&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&amp;gt; GetEnumerator()&lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;yield for :&amp;quot;&lt;/span&gt; + i);&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;&lt;span style="COLOR:blue;BACKGROUND-COLOR:yellow;"&gt;yield&lt;/span&gt;&lt;span style="BACKGROUND-COLOR:yellow;"&gt; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; i;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&amp;gt; GetItems()&lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&amp;gt; ret = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 5; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;for :&amp;quot;&lt;/span&gt; + i);&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;ret.Add(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; ret;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; Main(&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; j &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; GetEnumerator())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;yield foreach :&amp;quot;&lt;/span&gt; + j);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; j &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; GetItems())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;foreach :&amp;quot;&lt;/span&gt; + j);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&lt;span style="COLOR:#2b91af;"&gt;Console&lt;/span&gt;.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;Here is just an example on how to traverse a tree using yield:&lt;br /&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:Courier New;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="COLOR:#2b91af;"&gt;IComparable&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;where&lt;/span&gt; T : &lt;span style="COLOR:#2b91af;"&gt;IComparable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; TreeNode(){ }&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; TreeNode(T data) : &lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;(){&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.data = data;}&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; T data;&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; T Data&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;get&lt;/span&gt; { &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; data; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;set&lt;/span&gt; { data = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; parent;&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; Parent&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;get&lt;/span&gt; { &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; parent; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;set&lt;/span&gt; { parent = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }&lt;br /&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;TreeNodeCollection&lt;/span&gt;&amp;lt;T&amp;gt; nodes;&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;TreeNodeCollection&lt;/span&gt;&amp;lt;T&amp;gt; Nodes&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;get&lt;/span&gt; &lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (nodes == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;){nodes = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;TreeNodeCollection&lt;/span&gt;&amp;lt;T&amp;gt;(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;);}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; nodes; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;set&lt;/span&gt; { nodes = &lt;span style="COLOR:blue;"&gt;value&lt;/span&gt;; }&lt;br /&gt;}&lt;span style="COLOR:blue;"&gt;&lt;br /&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; GetAncestors()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; GetAncestors(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; GetAncestors(&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; node)&lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; ((node != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (node.Parent != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;))&lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:blue;BACKGROUND-COLOR:yellow;"&gt;yield&lt;/span&gt;&lt;span style="BACKGROUND-COLOR:yellow;"&gt; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; node.Parent;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; n &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; GetAncestors(node.Parent))&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;&lt;span style="COLOR:blue;BACKGROUND-COLOR:yellow;"&gt;yield&lt;/span&gt;&lt;span style="BACKGROUND-COLOR:yellow;"&gt; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; n;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; GetDescendents()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; GetDescendents(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;static&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt; GetDescendents(&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; node)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; child &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; node.Nodes)&lt;br /&gt;&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;&amp;nbsp;&lt;span style="COLOR:blue;BACKGROUND-COLOR:yellow;"&gt;yield&lt;/span&gt;&lt;span style="BACKGROUND-COLOR:yellow;"&gt; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; child;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR:#2b91af;"&gt;TreeNode&lt;/span&gt;&amp;lt;T&amp;gt; de &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; GetDescendents(child))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="COLOR:blue;BACKGROUND-COLOR:yellow;"&gt;yield&lt;/span&gt;&lt;span style="BACKGROUND-COLOR:yellow;"&gt; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; de;&lt;/span&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx&amp;amp;;subject=To+yield%2c+or+not+to+yield" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx&amp;amp;;title=To+yield%2c+or+not+to+yield" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx&amp;amp;title=To+yield%2c+or+not+to+yield" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx&amp;amp;;title=To+yield%2c+or+not+to+yield" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx&amp;amp;;title=To+yield%2c+or+not+to+yield&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=182601" width="1" height="1"&gt;</description></item><item><title>GenericList&lt;T&gt;, Events, Aggregator</title><link>http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx</link><pubDate>Wed, 06 Jun 2007 15:42:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:182598</guid><dc:creator>danieb</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=182598</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx#comments</comments><description>&lt;p&gt;Download the sourcecode &lt;a href="http://dotnet.org.za/files/folders/source/entry184983.aspx"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I found this custom class I pieced together quite useful. It&amp;#39;s essentially just a wrapper for List&amp;lt;T&amp;gt;, but with some added functionality.&lt;br /&gt;&lt;br /&gt;So I added the following events that also supports &amp;quot;Cancel&amp;quot; *&lt;br /&gt;BeforeAdd *&lt;br /&gt;ItemAdded &lt;br /&gt;BeforeItemInsert *&lt;br /&gt;ItemInserted&lt;br /&gt;BeforeRemove *&lt;br /&gt;ItemRemoved&lt;br /&gt;BeforeRemoveAt *&lt;br /&gt;ItemRemovedAt&lt;br /&gt;BeforeClear * 
&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;DistinctList&amp;lt;T&amp;gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;The cancel events allowed me to create &amp;quot;DistinctList&amp;lt;T&amp;gt;&amp;quot; which is quite handy. &lt;br /&gt;Notice that T has to implement &lt;a href="http://msdn2.microsoft.com/en-us/library/system.icomparable.aspx"&gt;IComparable&lt;/a&gt; since the Contains evaluates the &amp;quot;CompareTo&amp;quot; on T to determine if it&amp;#39;s contained in the list. (This is crucial for custom objects)&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
			&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; A Disctinct list of items&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; The list will automatically check that no duplicates are added to the collection&lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
			&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
			&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;typeparam name=&amp;quot;T&amp;quot;&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;
			&lt;span style="color:blue;"&gt;class&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;DistinctList&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="color:#2b91af;"&gt;GenericList&lt;/span&gt;&amp;lt;T&amp;gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af;"&gt;IComparable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;protected&lt;/span&gt;
			&lt;span style="color:blue;"&gt;override&lt;/span&gt;
			&lt;span style="color:blue;"&gt;bool&lt;/span&gt; OnBeforeItemInsert(&lt;span style="color:blue;"&gt;int&lt;/span&gt; index, T item)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Contains(item))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt;
			&lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnBeforeItemInsert(index, item);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
			&lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue;"&gt;protected&lt;/span&gt;
			&lt;span style="color:blue;"&gt;override&lt;/span&gt;
			&lt;span style="color:blue;"&gt;bool&lt;/span&gt; OnBeforeAdd(T item)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Contains(item))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue;"&gt;return&lt;/span&gt;
			&lt;span style="color:blue;"&gt;base&lt;/span&gt;.OnBeforeAdd(item);&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
			&lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Aggregation&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;I know &lt;a href="http://msdn.microsoft.com/data/ref/linq/"&gt;Linq&lt;/a&gt; will make this obsolete since it supports aggregation but in 2.0 how many times have you written similar code?&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt; list = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:blue;"&gt;int&lt;/span&gt;[] { 70, 20 });&lt;br /&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; total = 0;&lt;br /&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; i &lt;span style="color:blue;"&gt;in&lt;/span&gt; list)&lt;br /&gt;    total += i;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(((&lt;span style="color:blue;"&gt;double&lt;/span&gt;)total) / ((&lt;span style="color:blue;"&gt;double&lt;/span&gt;)list.Count), 45.0);&lt;/span&gt;
		&lt;br /&gt;Is this not much easier?&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;GenericList&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt; list = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;GenericList&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:blue;"&gt;int&lt;/span&gt;[] { 70, 20 });&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(list.Average(), 45.0);&lt;/span&gt;&lt;br /&gt;Or on Complex types like person:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;IComparable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; Person(&lt;span style="color:blue;"&gt;string&lt;/span&gt; name, &lt;span style="color:blue;"&gt;int&lt;/span&gt; age) { &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Name = name; &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Age = age; }&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
			&lt;span style="color:blue;"&gt;string&lt;/span&gt; Name;&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
			&lt;span style="color:blue;"&gt;int&lt;/span&gt; Age;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
			&lt;span style="color:blue;"&gt;int&lt;/span&gt; CompareTo(&lt;span style="color:blue;"&gt;object&lt;/span&gt; obj)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
			&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Name.CompareTo(((&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;)obj).Name);&lt;br /&gt;    }         &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;We can simply do this:&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;GenericList&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;&amp;gt; list = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;GenericList&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;&amp;gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;[]{&lt;br /&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Old Guy&amp;quot;&lt;/span&gt;,70)&lt;br /&gt;,&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Person&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Young Guy&amp;quot;&lt;/span&gt;,20)});&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(list.Average(&lt;span style="color:#a31515;"&gt;&amp;quot;Age&amp;quot;&lt;/span&gt;), 45.0);&lt;/span&gt;&lt;br /&gt;So how does it work? I have pieced together an Aggregation helper that uses the (+) and (-) operators. &lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;
			&lt;span style="color:blue;"&gt;static&lt;/span&gt; T Aggregate&amp;lt;T&amp;gt;(&lt;span style="color:#2b91af;"&gt;Aggregators&lt;/span&gt; aggregator, &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt; list, &lt;span style="color:blue;"&gt;string&lt;/span&gt; propertyName)&lt;br /&gt;    &lt;span style="color:blue;"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af;"&gt;IComparable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;T ret = &lt;span style="color:blue;"&gt;default&lt;/span&gt;(T);&lt;br /&gt;    &lt;span style="color:blue;"&gt;int&lt;/span&gt; count = 0;&lt;br /&gt;    &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:blue;"&gt;object&lt;/span&gt; item &lt;span style="color:blue;"&gt;in&lt;/span&gt; list)&lt;br /&gt;    {&lt;br /&gt;        T value = &lt;span style="color:#2b91af;"&gt;AggregationHelper&lt;/span&gt;.GetValue&amp;lt;T&amp;gt;(item, propertyName);&lt;br /&gt;        &lt;span style="color:blue;"&gt;switch&lt;/span&gt; (aggregator)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue;"&gt;case&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Aggregators&lt;/span&gt;.avg:&lt;br /&gt;            &lt;span style="color:blue;"&gt;case&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Aggregators&lt;/span&gt;.sum:&lt;br /&gt;                &lt;strong&gt;&lt;span style="background-color:yellow;"&gt;ret = &lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;.Sum(ret, value);&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color:blue;"&gt;case&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Aggregators&lt;/span&gt;.max:&lt;br /&gt;                &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ret.CompareTo(value) &amp;gt; 0)&lt;br /&gt;                    ret = value;&lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color:blue;"&gt;case&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Aggregators&lt;/span&gt;.min:&lt;br /&gt;                &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ret.CompareTo(value) &amp;lt; 0)&lt;br /&gt;                    ret = value;&lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color:blue;"&gt;default&lt;/span&gt;:&lt;br /&gt;                &lt;span style="color:blue;"&gt;throw&lt;/span&gt;
			&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;(&lt;br /&gt;&lt;span style="color:blue;"&gt;                 string&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;&amp;quot;Aggregator &amp;#39;{0}&amp;#39; not implemented&amp;quot;&lt;br /&gt;&lt;/span&gt;                 , aggregator.ToString()));&lt;br /&gt;        }&lt;br /&gt;        count++;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt; (aggregator == &lt;span style="color:#2b91af;"&gt;Aggregators&lt;/span&gt;.avg)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt; (ret &lt;span style="color:blue;"&gt;is&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;IConvertible&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:blue;"&gt;double&lt;/span&gt; total = (&lt;span style="color:blue;"&gt;double&lt;/span&gt;)System.&lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ChangeType(ret, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue;"&gt;double&lt;/span&gt;));&lt;br /&gt;            &lt;span style="color:blue;"&gt;double&lt;/span&gt; avg = total / (&lt;span style="color:blue;"&gt;double&lt;/span&gt;)count;&lt;br /&gt;            ret = (T)System.&lt;span style="color:#2b91af;"&gt;Convert&lt;/span&gt;.ChangeType(avg, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(T));&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color:blue;"&gt;else&lt;br /&gt;&lt;/span&gt;        {&lt;br /&gt;            &lt;span style="color:blue;"&gt;throw&lt;/span&gt;
			&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;NotImplementedException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Type should be IConvertable when using average&amp;quot;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue;"&gt;return&lt;/span&gt; ret;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;The GetValue&amp;lt;T&amp;gt; will either simply return the value or use reflection for complex types to get the value i.e. Person.Age.&lt;br /&gt;&lt;br /&gt;For the GenericWrapper&amp;lt;T&amp;gt; I used Lightweight Code Generation (LCG) for operator overloading as shown in this &lt;a href="http://www.codeproject.com/csharp/genericoperators.asp"&gt;example&lt;/a&gt; by &lt;a href="http://www.codeproject.com/script/Articles/list_articles.asp?userid=188603"&gt;&lt;span style="color:blue;text-decoration:underline;"&gt;&lt;strong&gt;Keith Farmer&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;Basically what this does it is allows me to call the +,- operators on any type without having to cast.&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; : &lt;span style="color:#2b91af;"&gt;IComparable&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;IComparable&lt;/span&gt;&amp;lt;T&amp;gt;&lt;br /&gt;    &lt;span style="color:blue;"&gt;where&lt;/span&gt; T : &lt;span style="color:#2b91af;"&gt;IComparable&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; GenericWrapper(T value) { _value = value; }&lt;br /&gt;    &lt;span style="color:blue;"&gt;private&lt;/span&gt; T _value;&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt; T Value&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; _value; }&lt;br /&gt;        &lt;span style="color:blue;"&gt;set&lt;/span&gt; { _value = &lt;span style="color:blue;"&gt;value&lt;/span&gt;; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    #region&lt;/span&gt; Opperators         &lt;br /&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; cached copy of the Add&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;T,T&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt; delegate&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:blue;"&gt;private&lt;/span&gt;
				&lt;span style="color:blue;"&gt;static&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;BinaryOperator&lt;/span&gt;&amp;lt;T, T, T&amp;gt; addTT;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; cached copy of the Subtract&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;T,T&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt; delegate&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:blue;"&gt;private&lt;/span&gt;
				&lt;span style="color:blue;"&gt;static&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;BinaryOperator&lt;/span&gt;&amp;lt;T, T, T&amp;gt; subTT;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; overloaded addition operator&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; This will use GenericOperatorFactory to create the Add&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;T,T&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt; delegate&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
				&lt;span style="color:blue;"&gt;static&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color:blue;"&gt;operator&lt;/span&gt; +(&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; p1, &lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; p2)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:green;"&gt;// use addTT to cache the delegate locally&lt;br /&gt;&lt;/span&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt; (addTT == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            addTT = &lt;span style="color:#2b91af;"&gt;GenericOperatorFactory&lt;/span&gt;&amp;lt;T, T, T, &lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;.Add;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
				&lt;span style="color:blue;"&gt;new&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;(addTT(p1.Value, p2.Value));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; overloaded subtraction operator&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; This will use GenericOperatorFactory to create the Subtract&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;T,T&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt; delegate&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt;
				&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
				&lt;span style="color:blue;"&gt;static&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; &lt;span style="color:blue;"&gt;operator&lt;/span&gt; -(&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; p1, &lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt; p2)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:green;"&gt;// use subTT to cache the delegate locally&lt;br /&gt;&lt;/span&gt;        &lt;span style="color:blue;"&gt;if&lt;/span&gt; (subTT == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            subTT = &lt;span style="color:#2b91af;"&gt;GenericOperatorFactory&lt;/span&gt;&amp;lt;T, T, T, &lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;&amp;gt;.Subtract;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
				&lt;span style="color:blue;"&gt;new&lt;/span&gt;
				&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;(subTT(p1.Value, p2.Value));&lt;br /&gt;    }&lt;br /&gt;&lt;span style="color:blue;"&gt;    #endregion&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
				&lt;span style="color:blue;"&gt;virtual&lt;/span&gt;
				&lt;span style="color:blue;"&gt;int&lt;/span&gt; CompareTo(&lt;span style="color:blue;"&gt;object&lt;/span&gt; other)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
				&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Value.CompareTo((T)(other));&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
				&lt;span style="color:blue;"&gt;virtual&lt;/span&gt;
				&lt;span style="color:blue;"&gt;int&lt;/span&gt; CompareTo(T other)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt;
				&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Value.CompareTo(other);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;span style="color:blue;"&gt;    #region&lt;/span&gt; Sum&lt;br /&gt;    &lt;span style="color:blue;"&gt;public&lt;/span&gt;
				&lt;span style="color:blue;"&gt;static&lt;/span&gt; T Sum(T x, T y)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:#2b91af;background-color:yellow;"&gt;GenericWrapper&lt;/span&gt;&lt;span style="background-color:yellow;"&gt;&amp;lt;T&amp;gt; tmp = (&lt;span style="color:blue;"&gt;new&lt;/span&gt;
					&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;(x) + &lt;span style="color:blue;"&gt;new&lt;/span&gt;
					&lt;span style="color:#2b91af;"&gt;GenericWrapper&lt;/span&gt;&amp;lt;T&amp;gt;(y));&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:14pt;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;        &lt;span style="color:blue;"&gt;return&lt;/span&gt; tmp.Value;&lt;br /&gt;    }         &lt;br /&gt;&lt;span style="color:blue;"&gt;    #endregion&lt;br /&gt;&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx&amp;amp;;subject=GenericList%26lt%3bT%26gt%3b%2c+Events%2c+Aggregator" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx&amp;amp;;title=GenericList%26lt%3bT%26gt%3b%2c+Events%2c+Aggregator" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx&amp;amp;title=GenericList%26lt%3bT%26gt%3b%2c+Events%2c+Aggregator" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx&amp;amp;;title=GenericList%26lt%3bT%26gt%3b%2c+Events%2c+Aggregator" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx&amp;amp;;title=GenericList%26lt%3bT%26gt%3b%2c+Events%2c+Aggregator&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=182598" width="1" height="1"&gt;</description></item><item><title>Divx-Zune</title><link>http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx</link><pubDate>Tue, 27 Mar 2007 06:04:52 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:118505</guid><dc:creator>danieb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=118505</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx#comments</comments><description>&lt;p&gt;Transcode DiVX, XViD, and MPEG files with .AVI extensions to zune! &lt;a href="http://www.zunescene.com/zune-divx/" title="http://www.zunescene.com/zune-divx/"&gt;See how to&lt;/a&gt;?&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx&amp;amp;;subject=Divx-Zune" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx&amp;amp;;title=Divx-Zune" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx&amp;amp;title=Divx-Zune" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx&amp;amp;;title=Divx-Zune" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx&amp;amp;;title=Divx-Zune&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/27/divx-zune.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=118505" width="1" height="1"&gt;</description></item><item><title>Date RangeValidator </title><link>http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx</link><pubDate>Thu, 08 Mar 2007 15:36:12 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:111298</guid><dc:creator>danieb</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=111298</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx#comments</comments><description>&lt;p&gt;I struggled a bit with a range validator for dates. So hopefully this can help someone.
&lt;/p&gt;&lt;p&gt;I tried:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;RangeValidator&lt;/span&gt; val = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;RangeValidator&lt;/span&gt;();&lt;br /&gt;val.MinimumValue = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Today.ToString();&lt;br /&gt;val.MaximumValue = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.MaxValue.ToString();&lt;br /&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;I but finally got it to work:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:10pt;"&gt;&lt;span style="color:#2b91af;"&gt;RangeValidator&lt;/span&gt; val = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;RangeValidator&lt;/span&gt;();&lt;br /&gt;val.MinimumValue = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Today.ToString(&lt;span style="color:#a31515;"&gt;"d"&lt;/span&gt;);&lt;br /&gt;val.MaximumValue = &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.MaxValue.ToString(&lt;span style="color:#a31515;"&gt;"d"&lt;/span&gt;);&lt;/span&gt;
	&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx&amp;amp;;subject=Date+RangeValidator+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx&amp;amp;;title=Date+RangeValidator+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx&amp;amp;title=Date+RangeValidator+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx&amp;amp;;title=Date+RangeValidator+" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx&amp;amp;;title=Date+RangeValidator+&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/08/date-rangevalidator.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=111298" width="1" height="1"&gt;</description></item><item><title>March 2007 CTP</title><link>http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx</link><pubDate>Thu, 01 Mar 2007 04:48:23 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:107104</guid><dc:creator>danieb</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=107104</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx#comments</comments><description>&lt;p&gt;The Orcas March 2007 CTP is available as a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=B533619A-0008-4DD6-9ED1-47D482683C78&amp;amp;displaylang=en"&gt;Virtual PC image&lt;/a&gt; or as a &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cf76fcba-07af-47ac-8822-4ad346210670&amp;amp;DisplayLang=en"&gt;standard self-extracting install&lt;/a&gt;.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx&amp;amp;;subject=March+2007+CTP" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx&amp;amp;;title=March+2007+CTP" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx&amp;amp;title=March+2007+CTP" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx&amp;amp;;title=March+2007+CTP" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx&amp;amp;;title=March+2007+CTP&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/03/01/march-2007-ctp.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=107104" width="1" height="1"&gt;</description></item><item><title>Vista and Office 2007 Preview Handler Pack released</title><link>http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx</link><pubDate>Wed, 28 Feb 2007 13:54:41 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:107040</guid><dc:creator>danieb</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/danieb/rsscomments.aspx?PostID=107040</wfw:commentRss><comments>http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx#comments</comments><description>&lt;p&gt;File previewers that come with the 2007 Microsoft Office system allow you to preview the following files in Microsoft Office Outlook 2007: 
&lt;/p&gt;&lt;p&gt;Microsoft Office Outlook 2007 items. &lt;br /&gt;Microsoft Office Word 2007 documents. &lt;br /&gt;Microsoft Office PowerPoint 2007 presentations. &lt;br /&gt;Microsoft Office Excel 2007 worksheets. &lt;br /&gt;Microsoft Office Visio 2007 drawings. &lt;br /&gt;Images and text files. 
&lt;/p&gt;&lt;p&gt;Check this cool &lt;a href="http://tatham.wordpress.com/2006/12/20/vista-and-office-2007-preview-handler-pack-released/"&gt;Preview Handler&lt;/a&gt; for *.cs and *.aspx. Then here is another previewer from msdn mag for &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/01/PreviewHandlers/default.aspx"&gt;pdf&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;  
 &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx&amp;amp;;subject=Vista+and+Office+2007+Preview+Handler+Pack+released" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx&amp;amp;;title=Vista+and+Office+2007+Preview+Handler+Pack+released" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx&amp;amp;title=Vista+and+Office+2007+Preview+Handler+Pack+released" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx&amp;amp;;title=Vista+and+Office+2007+Preview+Handler+Pack+released" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx&amp;amp;;title=Vista+and+Office+2007+Preview+Handler+Pack+released&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/danieb/archive/2007/02/28/vista-and-office-2007-preview-handler-pack-released.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=107040" width="1" height="1"&gt;</description></item></channel></rss>