<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Danie Bruwer</title><subtitle type="html">C# ASP.NET Development</subtitle><id>http://dotnet.org.za/danieb/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnet.org.za/danieb/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20611.960">Community Server</generator><updated>2007-02-22T17:15:44Z</updated><entry><title>Javascript Querystring Class Version 1.4</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx" /><id>http://dotnet.org.za/danieb/archive/2008/08/26/javascript-querystring-class-version-1-4.aspx</id><published>2008-08-26T09:58:00Z</published><updated>2008-08-26T09:58:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>Javascript Querystring Class </title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx" /><id>http://dotnet.org.za/danieb/archive/2008/08/06/javascript-querystring-class.aspx</id><published>2008-08-06T12:45:00Z</published><updated>2008-08-06T12:45:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>ListItemCollection.SyncToList</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx" /><id>http://dotnet.org.za/danieb/archive/2008/01/10/listitemcollection-synctolist.aspx</id><published>2008-01-10T00:16:00Z</published><updated>2008-01-10T00:16:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>ListItemCollection.SelectByValue, SelectByText</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx" /><id>http://dotnet.org.za/danieb/archive/2008/01/09/listitemcollection-selectbyvalue-selectbytext.aspx</id><published>2008-01-09T23:42:00Z</published><updated>2008-01-09T23:42:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>The Worst Bug Ever</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx" /><id>http://dotnet.org.za/danieb/archive/2007/11/26/the-worst-bug-ever.aspx</id><published>2007-11-26T06:24:00Z</published><updated>2007-11-26T06:24:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>Using Generics, Anonymous Methods and Delegates to join.</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx" /><id>http://dotnet.org.za/danieb/archive/2007/11/20/using-generics-anonymous-methods-and-delegates-to-join.aspx</id><published>2007-11-20T16:54:00Z</published><updated>2007-11-20T16:54:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>Custom Ajax Controls</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx" /><id>http://dotnet.org.za/danieb/archive/2007/06/11/custom-ajax-controls.aspx</id><published>2007-06-11T10:30:00Z</published><updated>2007-06-11T10:30:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>Publishing Code from Word 2007</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx" /><id>http://dotnet.org.za/danieb/archive/2007/06/06/publishing-code-from-word-2007.aspx</id><published>2007-06-06T17:59:24Z</published><updated>2007-06-06T17:59:24Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>To yield, or not to yield</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx" /><id>http://dotnet.org.za/danieb/archive/2007/06/06/to-yield-or-not-to-yield.aspx</id><published>2007-06-06T16:43:00Z</published><updated>2007-06-06T16:43:00Z</updated><content type="html">&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;</content><author><name>danieb</name><uri>http://dotnet.org.za/members/danieb.aspx</uri></author></entry><entry><title>GenericList&lt;T&gt;, Events, Aggregator</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx" /><id>http://dotnet.org.za/danieb/archive/2007/06/06/genericlist-lt-t-gt-events-aggregator.aspx</id><published>2007-06-06T16:42:00Z</published><updated>2007-06-06T16:42:00Z</updated><content type="html">&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;
	