<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">IBlog&amp;lt;Johan&amp;gt;</title><subtitle type="html">Johan Danforth's Blog</subtitle><id>http://weblogs.asp.net/jdanforth/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/jdanforth/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2009-03-14T17:29:41Z</updated><entry><title>Windows 7 RC Feels Very Stable</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/05/13/windows-7-rc-feels-very-stable.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/05/13/windows-7-rc-feels-very-stable.aspx</id><published>2009-05-13T08:04:34Z</published><updated>2009-05-13T08:04:34Z</updated><content type="html">&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/jdanforth/win7logo_76F76A42.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Windows 7" border="0" alt="Windows 7" align="right" src="http://weblogs.asp.net/blogs/jdanforth/win7logo_thumb_1C80E7A4.png" width="110" height="143" /&gt;&lt;/a&gt; I upgraded to Win7rc as fast as I could from the beta and pretty much all the problems I had on the beta are gone! I’ve never experienced a beta OS as stable as this one, it’s nothing short of impressive.&lt;/p&gt;  &lt;p&gt;Hangs on reboot/shutdown are gone.&lt;/p&gt;  &lt;p&gt;Annoying stuttering sound probs are gone.&lt;/p&gt;  &lt;p&gt;File copy probs are gone.&lt;/p&gt;  &lt;p&gt;Screen update probs gone.&lt;/p&gt;  &lt;p&gt;I’m running 64-bit on a DELL Precision M4400 and the funny thing is that think I’ve not installed any extra drivers except for the touchpad and the initial network drivers, and it runs like a charm. It was a nightmare to get it working properly on 64-bit Vista, even when it came pre-installed with it from DELL! (Shame on you DELL to ship a box that doesn’t even run properly on the pre-installed software!!)&lt;/p&gt;  &lt;p&gt;I will have to install the extra software to get the built-in 3G mobile network running and that was kind of tricky on the beta, and the finger-print reader I’m not even going to bother with.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7084754" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Windows 7" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Windows 7 Release Candidate Availability</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/04/30/windows-7-release-candidate-availability.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/04/30/windows-7-release-candidate-availability.aspx</id><published>2009-04-30T07:49:09Z</published><updated>2009-04-30T07:49:09Z</updated><content type="html">&lt;p&gt;&lt;img style="margin: 5px" title="Windows 7 Beta" border="0" alt="Windows 7 Beta" align="right" src="http://weblogs.asp.net/blogs/jdanforth/image_3D881299.png" width="244" height="154" /&gt;Glad to &lt;a href="http://blogs.technet.com/askperf/archive/2009/04/28/windows-7-release-candidate-availability-office-2007-sp2-rtm.aspx" target="_blank"&gt;read about the upcoming RC release of Windows 7&lt;/a&gt;. Just wondering how I should “migrate” to the RC from by current beta as I’ve spent days and days to get it in pretty good shape. Lots of job, but Win7 is just worth it.&lt;/p&gt;  &lt;p&gt;From the &lt;a href="http://blogs.technet.com/askperf" target="_blank"&gt;Askperf webby&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;We now have some dates that we can share with you.&amp;#160; The RC build is slated to be available for download by MSDN / TechNet subscribers this Thursday (April 30, 2009).&amp;#160; Broader, public availability will begin the following Tuesday (May 5, 2009).&amp;#160; If you haven’t already started using Windows 7, there are plenty of changes since the Beta release.&amp;#160; You can read more about these changes in the following posts from the Engineering Windows 7 blog: &lt;a href="http://blogs.msdn.com/e7/archive/2009/02/26/some-changes-since-beta.aspx"&gt;Some Changes Since Beta for the RC&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/e7/archive/2009/03/13/a-few-more-changes-from-beta-to-rc.aspx"&gt;A few more changes from Beta to RC…&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7066408" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Windows 7" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Restored 64-bit Windows 7 Beta from Windows Home Server Backup on a DELL Laptop</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/04/27/restored-64-bit-windows-7-beta-from-windows-home-server-backup-on-a-dell-laptop.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/04/27/restored-64-bit-windows-7-beta-from-windows-home-server-backup-on-a-dell-laptop.aspx</id><published>2009-04-27T08:25:26Z</published><updated>2009-04-27T08:25:26Z</updated><content type="html">&lt;p&gt;&lt;img title="Windows 7 Beta" border="0" alt="Windows 7 Beta" align="right" src="http://weblogs.asp.net/blogs/jdanforth/image_3D881299.png" width="244" height="154" /&gt;The HD of the new DELL Precision M4400 I have crashed, burned and died yesterday. I heard the screams 3 rooms away while drinking my morning coffee. It was horrific. &lt;/p&gt;  &lt;p&gt;Luckily it was powered on during the night, so the Windows Home Server (WHS) had a full backup. Had a few probs though:&lt;/p&gt;  &lt;p&gt;- the recovery cd didn’t have network drivers for my LAN card&lt;/p&gt;  &lt;p&gt;- the drivers stored in the special folder on the backup were 64-bit, which isn’t supported by the recovery cd (DUH!!)&lt;/p&gt;  &lt;p&gt;- had to download 32-bit drivers from DELL and put on USB drive&lt;/p&gt;  &lt;p&gt;Tip: make sure your c-drive matches the size of the backup, and create a “dummy” FAT recovery partition on your new HD which mimics the DELL RECOVERY partition. Also, make sure your USB drive is disconnected once you don’t need it anymore. Make sure it’s disconnected before you finish the backup. Also, eject the recovery cd when rebooting, just to be sure! I had to do the restore 3 times before it managed to make my c-drive bootable! Quite annoying…&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7060475" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Windows Home Server" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+Home+Server/default.aspx" /><category term="Windows 7" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx" /></entry><entry><title>7-Zip on 64 Bit Windows 7 Beta</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/04/15/7-zip-on-64-bit-windows-7-beta.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/04/15/7-zip-on-64-bit-windows-7-beta.aspx</id><published>2009-04-15T17:26:02Z</published><updated>2009-04-15T17:26:02Z</updated><content type="html">&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="7ziplogo" border="0" alt="7ziplogo" align="right" src="http://weblogs.asp.net/blogs/jdanforth/7ziplogo_6A1183D4.png" width="110" height="63" /&gt; I’m having problems in my 64 bit Windows 7 beta with the built in support for unzipping zip-files containing *lots* of files. It often hangs near the end and I have to reboot to sort things out.&lt;/p&gt;  &lt;p&gt;Downloaded &lt;a href="http://www.7-zip.org/" target="_blank"&gt;64 bit version of 7-Zip&lt;/a&gt; and it work fine – so far. You might want to try that one out if you have the same problems. Eventually it may also hang, but I’ll try it for a while and shout out if I notice any probs.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7047052" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Tools" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Tools/default.aspx" /><category term="Windows 7" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Writespace in Other Languages</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/04/05/writespace-in-other-languages.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/04/05/writespace-in-other-languages.aspx</id><published>2009-04-05T17:29:24Z</published><updated>2009-04-05T17:29:24Z</updated><content type="html">&lt;p&gt;&lt;img border="0" alt="Writespace" align="right" src="http://weblogs.asp.net/blogs/jdanforth/WindowsLiveWriter/WCFLearningsDrawingonMultipleMonitors_13EA4/Logo2_white_small_3.png" width="200" height="94" /&gt;Some time ago I noticed a peak in &lt;a href="http://writespace.codeplex.com/" target="_blank"&gt;Writespace&lt;/a&gt; downloads and I started to get some emails from people with requests for new features and stuff, which is fun. I saw from the stats that Lifehacker had a couple of articles on Writespace, as well as Danish PC-World, some Japanese site (I have no idea what the site is about :) and a few other places. &lt;/p&gt;  &lt;p&gt;I had no idea if Writespace actually worked in Japanese, but apparently it does!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border="0" cellspacing="5" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Writespace on Lifehacker" border="0" alt="Writespace on Lifehacker" src="http://weblogs.asp.net/blogs/jdanforth/WriteSpace1_04006BC8.png" width="244" height="132" /&gt; &lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Writespace in Danish" border="0" alt="Writespace in Danish" src="http://weblogs.asp.net/blogs/jdanforth/getfile_375C2F24.jpg" width="244" height="159" /&gt; &lt;/td&gt;        &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Writespace in Japanese" border="0" alt="Writespace in Japanese" src="http://weblogs.asp.net/blogs/jdanforth/writespacejp_6083C762.png" width="244" height="138" /&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&lt;a href="http://lifehacker.com/5164895/writespace-turns-word-into-a-distraction%20free-editor" target="_blank"&gt;Lifehacker.com&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://www.pcworld.dk/art/10772?page=1" target="_blank"&gt;Pcworld.dk&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://www.pcworld.dk/art/10772?page=1" target="_blank"&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://www.moongift.jp/2009/03/writespace/" target="_blank"&gt;Moongift.jp&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;If I get some time for it I’ll release a Word 2003 version and add a few of the requested new features.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7026909" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Other" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Other/default.aspx" /><category term="Writespace" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Writespace/default.aspx" /></entry><entry><title>Fill a Select/Option from Json with jQuery</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/04/03/fill-a-select-option-from-json-with-jquery.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/04/03/fill-a-select-option-from-json-with-jquery.aspx</id><published>2009-04-03T12:19:02Z</published><updated>2009-04-03T12:19:02Z</updated><content type="html">&lt;p&gt;&lt;img title="aspnet" border="0" alt="aspnet" align="right" src="http://weblogs.asp.net/blogs/jdanforth/aspnet_4860990D.jpg" width="380" height="76" /&gt;More jQuery and Json…&lt;/p&gt;  &lt;p&gt;To fill a listbox (select) with items from a Json call.&lt;/p&gt;  &lt;p&gt;I got this helper class to handle the options/items:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SelectOption
&lt;/span&gt;{
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String &lt;/span&gt;Value { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String &lt;/span&gt;Text { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }
}&lt;/pre&gt;

&lt;p&gt;A sample action/method in ASP.NET MVC that returns Json:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;JsonResult &lt;/span&gt;GetJson()
{
    &lt;span style="color: blue"&gt;var &lt;/span&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: #2b91af"&gt;SelectOption&lt;/span&gt;&amp;gt;
                   {
                       &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SelectOption &lt;/span&gt;{ Value = &lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;, Text = &lt;span style="color: #a31515"&gt;&amp;quot;Aron&amp;quot; &lt;/span&gt;},
                       &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SelectOption &lt;/span&gt;{ Value = &lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;, Text = &lt;span style="color: #a31515"&gt;&amp;quot;Bob&amp;quot; &lt;/span&gt;},
                       &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SelectOption &lt;/span&gt;{ Value = &lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;, Text = &lt;span style="color: #a31515"&gt;&amp;quot;Charlie&amp;quot; &lt;/span&gt;},
                       &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SelectOption &lt;/span&gt;{ Value = &lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;, Text = &lt;span style="color: #a31515"&gt;&amp;quot;David&amp;quot; &lt;/span&gt;}
                   };
    &lt;span style="color: blue"&gt;return &lt;/span&gt;Json(list);
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Some HTML and jQuery to fill the list at page load:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;
&lt;/span&gt;    &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;select &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;MyList&amp;quot; /&amp;gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;script &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;

        &lt;/span&gt;$(document).ready(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
            $.getJSON(&lt;span style="color: #a31515"&gt;&amp;quot;/Json/GetJson&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;, &lt;span style="color: blue"&gt;function&lt;/span&gt;(data) {
                $(&lt;span style="color: #a31515"&gt;&amp;quot;#MyList&amp;quot;&lt;/span&gt;).addItems(data);
            });
        });

        $.fn.addItems = &lt;span style="color: blue"&gt;function&lt;/span&gt;(data) {
            &lt;span style="color: blue"&gt;return this&lt;/span&gt;.each(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
                &lt;span style="color: blue"&gt;var &lt;/span&gt;list = &lt;span style="color: blue"&gt;this&lt;/span&gt;;
                $.each(data, &lt;span style="color: blue"&gt;function&lt;/span&gt;(index, itemData) {
                    &lt;span style="color: blue"&gt;var &lt;/span&gt;option = &lt;span style="color: blue"&gt;new &lt;/span&gt;Option(itemData.Text, itemData.Value);
                    list.add(option);
                });
            });
        };

        $(&lt;span style="color: #a31515"&gt;&amp;quot;#MyList&amp;quot;&lt;/span&gt;).change(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
            alert(&lt;span style="color: #a31515"&gt;'you selected ' &lt;/span&gt;+ $(&lt;span style="color: blue"&gt;this&lt;/span&gt;).val());
        });

    &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7024178" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="ASP.NET MVC" scheme="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx" /><category term="Json" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Json/default.aspx" /><category term="jQuery" scheme="http://weblogs.asp.net/jdanforth/archive/tags/jQuery/default.aspx" /></entry><entry><title>Json, jQuery and ASP.NET MVC</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/04/03/json-jquery-and-asp-net-mvc.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/04/03/json-jquery-and-asp-net-mvc.aspx</id><published>2009-04-03T12:01:20Z</published><updated>2009-04-03T12:01:20Z</updated><content type="html">&lt;p&gt;&lt;img title="aspnet" border="0" alt="aspnet" align="right" src="http://weblogs.asp.net/blogs/jdanforth/aspnet_4860990D.jpg" width="380" height="76" /&gt;I’m stacking a few things here related to Json, jQuery and ASP.NET MVC so that I can get to them later on.&lt;/p&gt;  &lt;p&gt;JQuery to grab some Json when a web page is loaded:&lt;/p&gt;  &lt;pre class="code"&gt;$(document).ready(&lt;span style="color: blue"&gt;function&lt;/span&gt;() {
    $.getJSON(&lt;span style="color: #a31515"&gt;&amp;quot;/MyController/MyJsonAction&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;null&lt;/span&gt;, &lt;span style="color: blue"&gt;function&lt;/span&gt;(data) {&lt;br /&gt;        &lt;span style="color: green"&gt;//do stuff with data here&lt;br /&gt;&lt;/span&gt;    });
});&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The smallish code in the ASP.NET MVC controller:&lt;/p&gt;

&lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;
    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;JsonResult&lt;/span&gt; GetJson()&lt;/p&gt;

    &lt;p style="margin: 0px"&gt;{&lt;/p&gt;

    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; Json(GetList());&lt;/p&gt;

    &lt;p style="margin: 0px"&gt;}&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It’s possible to use anonymous types with Json() as well, which is very useful but may be harder to unit test.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7024167" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="ASP.NET MVC" scheme="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx" /><category term="Json" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Json/default.aspx" /><category term="jQuery" scheme="http://weblogs.asp.net/jdanforth/archive/tags/jQuery/default.aspx" /></entry><entry><title>WCF Certificates with IIS on Windows 7 Beta</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/23/wcf-certificates-with-iis-on-windows-7-beta.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/23/wcf-certificates-with-iis-on-windows-7-beta.aspx</id><published>2009-03-23T11:29:49Z</published><updated>2009-03-23T11:29:49Z</updated><content type="html">&lt;p&gt;I’ve blogged earlier about the problems with Cassini and WCF on Windows 7 Beta (build 7000) and your best bet is to install IIS locally test your services in there. Now, there might be some problems getting IIS to read your service certificate and my colleague Tomas helped me get things running. I thought I might as well blog it here so that I got it documented…&lt;/p&gt;  &lt;p&gt;Open a VS2008 Command Prompt (I ran it as administrator) and create a certificate, then add it to your local store:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=localhost -sky exchange -pe&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;certmgr.exe -add -r LocalMachine -s My -c -n localhost -r CurrentUser -s TrustedPeople&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Then you have to give IIS access to the private part of the certificate and Tomas found some sample code to let you do that. &lt;a href="http://msdn.microsoft.com/en-us/library/aa717039.aspx" target="_blank"&gt;The FindPrivateKey.exe source code is available on MSDN&lt;/a&gt;. Keep working on the command prompt:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;FindPrivateKey.exe My LocalMachine -n &amp;quot;CN=localhost&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Note the output for private key directory and filename, for example:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Private key directory: C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Private key file name: 288538e27a2aebe9f77d2506bf6c836a_adf55683-4eae-4544-bbd1-d6844a44e538&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Then use them to feed the final call to give the default IIS-user access to the private key, for example:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;CACLS.exe C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\288538e27a2aebe9f77d2506bf6c836a_adf55683-4eae-4544-bbd1-d6844a44e538 /G &amp;quot;IIS_IUSRS&amp;quot;:R&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;That should be it, and it worked on our machines. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6994704" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="WCF" scheme="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx" /><category term="Windows 7" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Running ASP.NET MVC on Your Windows Home Server</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/22/running-asp-net-mvc-on-your-windows-home-server.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/22/running-asp-net-mvc-on-your-windows-home-server.aspx</id><published>2009-03-21T22:02:51Z</published><updated>2009-03-21T22:02:51Z</updated><content type="html">&lt;p&gt;&lt;img title="aspnet" border="0" alt="aspnet" align="right" src="http://weblogs.asp.net/blogs/jdanforth/aspnet_4860990D.jpg" width="380" height="76" /&gt;Right, so I ran the new Web Platform Installer 2.0 Beta on my WHS and it seems (so far) to have worked out quite well. I created a new MVC website with File-&amp;gt;New… and published it over to an MVC-directory on WHS (I have set that up earlier, with a file share and everything).&lt;/p&gt;  &lt;p&gt;Now, the version of IIS on Windows Home Server is IIS 6 (because WHS runs on Windows 2003 kind of), so ASP.NET MVC won’t work right out of the box. &lt;strong&gt;I was hoping that the Web Platform Installer would have taken care of that, but apparently not&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx" target="_blank"&gt;Phil Haack wrote a long, and very detailed blog post about how to set things up on IIS 6&lt;/a&gt;, so I’m following that, adding support for the .mvc extension, changing the routes in Global.asax and so on, and voila it works:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ASP.NET MVC in WHS" border="0" alt="ASP.NET MVC in WHS" src="http://weblogs.asp.net/blogs/jdanforth/image_147A51FB.png" width="644" height="410" /&gt; &lt;/p&gt;  &lt;p&gt;Now, I want to set up extension-less URL’s, which is prettier than having to have that .mvc extension in the URL. Phil cover this in his blog post as well, so I’m adding wildcard mappings, and here goes:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Extension-less URLs" border="0" alt="Extension-less URLs" src="http://weblogs.asp.net/blogs/jdanforth/image_2A148A98.png" width="644" height="353" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Isn’t that just great? I love my home server, maybe I can host my &lt;a href="http://writespace.codeplex.com/" target="_blank"&gt;Writespace&lt;/a&gt; Clickonce installer on my own server? Not too worried about the load on the server :)&lt;/p&gt;  &lt;p&gt;Watch this space for some sample stuff that will be located on my own server *big grin*&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6987366" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="ASP.NET MVC" scheme="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx" /><category term="Windows Home Server" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+Home+Server/default.aspx" /></entry><entry><title>Web Platform Installer 2.0 Beta on Windows Home Server</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/21/web-platform-installer-2-0-beta-on-windows-home-server.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/21/web-platform-installer-2-0-beta-on-windows-home-server.aspx</id><published>2009-03-21T21:15:05Z</published><updated>2009-03-21T21:15:05Z</updated><content type="html">&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Web Platform Installer" border="0" alt="Web Platform Installer" align="right" src="http://weblogs.asp.net/blogs/jdanforth/image_450B6380.png" width="163" height="143" /&gt; I’ve been thinking of setting up ASP.NET MVC 1.0 on my WHS and also start learning some Silverlight stuff, so I took a risk, went to the &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank"&gt;Microsoft Web Platform Installer&lt;/a&gt; page and clicked on the Beta 2.0 link. Downloaded the installer, marked ASP.NET MVC and the most necessary options and let it go. Should work, right?&lt;/p&gt;  &lt;p&gt;It had to reboot once to get Windows Installer 4.5 in, but it continued to chew on and after a few minutes:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Done!" border="0" alt="Done!" src="http://weblogs.asp.net/blogs/jdanforth/image_389D4057.png" width="458" height="314" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Yay! Now I just have to get an MVC test application on there somehow… brb.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6987183" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="ASP.NET MVC" scheme="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx" /><category term="Windows Home Server" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+Home+Server/default.aspx" /></entry><entry><title>IronRuby 0.3 Released</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/21/ironruby-0-3-released.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/21/ironruby-0-3-released.aspx</id><published>2009-03-21T19:50:37Z</published><updated>2009-03-21T19:50:37Z</updated><content type="html">&lt;p&gt;&lt;a href="http://blog.jimmy.schementi.com/2009/03/ironruby-03-released.html" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="ironruby" border="0" alt="ironruby" align="right" src="http://weblogs.asp.net/blogs/jdanforth/ironruby_2A3E34F8.png" width="175" height="55" /&gt; Jimmy Schemento just blogged&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I’m pleased to announce a new release of &lt;a href="http://ironruby.net/" target="_blank"&gt;&lt;font color="#99aadd"&gt;IronRuby&lt;/font&gt;&lt;/a&gt;: &lt;strong&gt;&lt;a href="http://ironruby.net/Download" target="_blank"&gt;&lt;font color="#99aadd"&gt;IronRuby 0.3&lt;/font&gt;&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Staying true to our “Conference-driven development schedule,” this release is in conjunction with &lt;a href="http://live.visitmix.com/"&gt;MIX ‘09&lt;/a&gt;, where &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; 3 Beta and &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en"&gt;ASP.NET MVC 1.0&lt;/a&gt; were announced, to name a few. &lt;a href="http://www.iunknown.com"&gt;John Lam&lt;/a&gt; spoke at MIX today at 12:30pm in Las Vegas about using dynamic languages in Silverlight for testing, scripting, and application building. And some ASP.NET MVC with IronRuby is thrown in there too.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You can &lt;a href="http://rubyforge.org/frs/download.php/53552/ironruby-0.3.0.zip" target="_blank"&gt;download IronRuby 0.3 here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6986877" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Ruby" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Ruby/default.aspx" /></entry><entry><title>ASP.NET MVC v1 Source Code Released</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/19/asp-net-mvc-v1-source-code-released.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/19/asp-net-mvc-v1-source-code-released.aspx</id><published>2009-03-19T08:47:09Z</published><updated>2009-03-19T08:47:09Z</updated><content type="html">&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="aspnet" border="0" alt="aspnet" align="right" src="http://weblogs.asp.net/blogs/jdanforth/aspnet_4860990D.jpg" width="380" height="76" /&gt; Phil twitted that the &lt;a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471" target="_blank"&gt;source code for ASP.NET MVC v1 is available on Codeplex&lt;/a&gt; now, so I guess it’ll be released as a proper installer on MSDN any time now.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; …and a few hours later &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;amp;displaylang=en" target="_blank"&gt;it was on MSDN&lt;/a&gt; :)&lt;/p&gt;  &lt;p&gt;Congrats to &lt;a href="http://haacked.com/archive/2009/03/18/aspnet-mvc-rtw.aspx" target="_blank"&gt;Phil Haack&lt;/a&gt; and his merry men for doing such an awesome job!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6978595" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="ASP.NET MVC" scheme="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx" /></entry><entry><title>Case Switching on CLR Types</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/19/case-switching-on-clr-types.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/19/case-switching-on-clr-types.aspx</id><published>2009-03-19T08:23:20Z</published><updated>2009-03-19T08:23:20Z</updated><content type="html">&lt;p&gt;As most .NET developers know, you cannot do case/switch on CLR types and one of the reasons for it was &lt;a href="http://blogs.msdn.com/peterhal/archive/2005/07/05/435760.aspx" target="_blank"&gt;explained pretty well years ago by Peter Hallam on the C# team&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;But there are many cases where you would like to iterate through a list of objects if mixed types and do specific things depending on it’s type. For fun I started to try out different ways to do it, some are better than others but they all do the same thing, more or less. I’m also exploring method extensions, method chaining and lambdas and some of the samples almost started to become fluent and DLS like. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Oh, I’m as far from a C# language expert as anyone can be, so there are other ways of doing this I’m sure. The random code below is just me playing around for a simple way of doing case/switching on types that worked in the code I’m currently working on.&lt;/p&gt;  &lt;p&gt;Also, if you would like a derived class to do something special, you normally override a method, send in some parameters and let that code whatever it so special. That’s basic OOD, see the Eat() method in the sample code below. But there are cases where you for one reason or other would not like to do this. Enough of that, this is just for fun.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A List of Pets&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I was working with a class hierarchy of pets like this:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; TypeCase&lt;/p&gt;  &lt;p style="margin: 0px"&gt;{&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Name { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;abstract&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Eat();&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; ToString()&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; Name;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt; Case&amp;lt;T&amp;gt;(&lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;T&amp;gt; action) &lt;span style="color: blue"&gt;where&lt;/span&gt; T : &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: blue"&gt;is&lt;/span&gt; T)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; action.Invoke((T)&lt;span style="color: blue"&gt;this&lt;/span&gt;);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;this&lt;/span&gt;;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &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;Dog&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Eat()&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(Name + &lt;span style="color: #a31515"&gt;&amp;quot; eats cats.&amp;quot;&lt;/span&gt;);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &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;Cat&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Eat()&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(Name + &lt;span style="color: #a31515"&gt;&amp;quot; eats mice.&amp;quot;&lt;/span&gt;);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;}&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We got a &lt;strong&gt;Cat&lt;/strong&gt; and a &lt;strong&gt;Dog&lt;/strong&gt; which are both different types of &lt;strong&gt;Pet&lt;/strong&gt;. They have a &lt;strong&gt;Name&lt;/strong&gt; and they can &lt;strong&gt;Eat()&lt;/strong&gt; which is good enough for testing.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Creating the List&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m creating a simple typed List like this:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; pets = &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: #2b91af"&gt;Pet&lt;/span&gt;&amp;gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt; { Name = &lt;span style="color: #a31515"&gt;&amp;quot;Morris&amp;quot;&lt;/span&gt;},&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt; { Name = &lt;span style="color: #a31515"&gt;&amp;quot;Buster&amp;quot;&lt;/span&gt;}&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;/p&gt;  &lt;p&gt;Now we have something to play with. First do something you often see, especially in .NET 1.x code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Case Switching on Strings&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It’s perfectly fine to &lt;strong&gt;switch&lt;/strong&gt; on strings, so this is quite common:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; pet &lt;span style="color: blue"&gt;in&lt;/span&gt; pets)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;switch&lt;/span&gt; (pet.GetType().ToString())&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: #a31515"&gt;&amp;quot;TypeCase.Cat&amp;quot;&lt;/span&gt;:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + pet);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: #a31515"&gt;&amp;quot;TypeCase.Dog&amp;quot;&lt;/span&gt;:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + pet);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;I’m not too fond of this, because you may rename &lt;strong&gt;Cat&lt;/strong&gt; or &lt;strong&gt;Dog&lt;/strong&gt; in the future, or change namespace of “TypeCase” to something else, and even though renaming stuff with Resharper is powerful, strings are often missed. It would have been nice to:&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;case&lt;/span&gt; &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;):&lt;/p&gt; &lt;/div&gt; &lt;!--EndFragment--&gt;  &lt;p&gt;But that’s not allowed. The &lt;strong&gt;case&lt;/strong&gt; must be a constant. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If Is &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A much safer way is to use if … else if … and instead of using string comparing, check the type with the is statement. It’s also faster to type:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; pet &lt;span style="color: blue"&gt;in&lt;/span&gt; pets)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (pet &lt;span style="color: blue"&gt;is&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + pet);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;span style="color: blue"&gt;if&lt;/span&gt; (pet &lt;span style="color: blue"&gt;is&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;) &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + pet);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;This code is perfectly fine and I’ve used it many times. But what if I wanted to have a Case-like syntax?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Method Extension on Type&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m thinking of a syntax like this one:&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pet.GetType().&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;), () =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + pet)).&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;), () =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + pet));&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;In this case we’re extending the Type type with a Case method, like this:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TypeExt&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &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;Type&lt;/span&gt; Case(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; t, &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; what, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt; action)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (t == what)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; action.Invoke();&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; t;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Action&lt;/strong&gt; parameter encapsulate the anonymous method we’re sending in, containing the stuff we want to do with the pet in question. In the &lt;strong&gt;Case()&lt;/strong&gt; extension method we’re testing to see if we’re given the right &lt;strong&gt;Type&lt;/strong&gt; and &lt;strong&gt;Invoke()&lt;/strong&gt; the anonymous method if so. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Important Note: &lt;/strong&gt;Without going into details, just make sure you don’t fall into a case of “&lt;a href="http://stackoverflow.com/questions/304258/access-to-modified-closure-2" target="_blank"&gt;Access to modified closure&lt;/a&gt;” when doing for(each) loops around anonymous methods. To be safe, you have to create a local pet-variable outside of the method:&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; pet &lt;span style="color: blue"&gt;in&lt;/span&gt; pets)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//some code&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; safePet = pet;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pet.GetType().&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;), () =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + safePet)).&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;), () =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + safePet));&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//some more code&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Better Method Extension on Type&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;But I’m not happy with this syntax. If feels more cumbersome than the if…is…if…else… syntax, and whenever you see the use of &lt;strong&gt;typeof()&lt;/strong&gt; in code like this, generics can do some work for you. So I’m going for a syntax like this:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pet.GetType().&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case&amp;lt;&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;&amp;gt;(obj =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + pet)).&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt;(obj =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + pet));&lt;/p&gt;  &lt;p&gt;This requires a new method extension:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TypeExt&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &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;Type&lt;/span&gt; Case&amp;lt;T&amp;gt;(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; t, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;&amp;gt; action)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (t == &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(T))&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; action.Invoke(t);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; t;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;Looks better, but you still risk getting into the issues with modified closure above and I would like to work on the “obj” parameter as if it was the &lt;strong&gt;Pet&lt;/strong&gt; objekt itself, not the Type. Let’s make it even better:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Even Better Method Extension on Pet&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Now I’m going for a syntax that looks like this:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; pet &lt;span style="color: blue"&gt;in&lt;/span&gt; pets)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pet.&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case&amp;lt;&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;&amp;gt;(c =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + c)).&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt;(d =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + d));&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pet.Eat();&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;As you can see, the syntax is cleaner and I can work with the pet object itself as a parameter handled to anonymous method in the lambda statement.&lt;/p&gt;  &lt;p&gt;To do this I have to create a method extension which knows about the Pet class:&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PetExt&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &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;Pet&lt;/span&gt; Case&amp;lt;T&amp;gt;(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt; pet, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;T&amp;gt; action) &lt;span style="color: blue"&gt;where&lt;/span&gt; T : &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (pet &lt;span style="color: blue"&gt;is&lt;/span&gt; T)&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; action.Invoke((T)pet);&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; pet;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;It’s not a generic Case Switcher on Type, but it feels good to me and is easy to work with. And you don’t have the issue with access to modified closures with this one.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Refined Method Extension on List of Pets&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m throwing in a final variant here, adding the Case method to the list itself: &lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;     &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pets.&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case((&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt; c) =&amp;gt;&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + c);&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c.Eat();&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }).&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt;(d =&amp;gt;&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + d);&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; d.Eat();&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt;      &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;      &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;       &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pets.&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case((&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt; c) =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A cat called &amp;quot;&lt;/span&gt; + c)).&lt;/p&gt;        &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Case&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt;(d =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;A dog called &amp;quot;&lt;/span&gt; + d));&lt;/p&gt;     &lt;/div&gt;   &lt;/div&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;As you can see, there are two ways syntactically to provide the type and the simple extension method for this variant looks like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PetListExt&lt;/span&gt;&lt;/p&gt;  &lt;div style="font-family: consolas; background: white; color: black; font-size: 10pt"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &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: #2b91af"&gt;Pet&lt;/span&gt;&amp;gt; Case&amp;lt;T&amp;gt;(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&amp;gt; pets, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;T&amp;gt; action) &lt;span style="color: blue"&gt;where&lt;/span&gt; T : &lt;span style="color: #2b91af"&gt;Pet&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; pet &lt;span style="color: blue"&gt;in&lt;/span&gt; pets)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (pet &lt;span style="color: blue"&gt;is&lt;/span&gt; T)&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; action.Invoke((T)pet);&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; pets;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/div&gt;  &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;  &lt;p style="margin: 0px"&gt;That’s it. I’ve seen a number of more complex ways to do roughly the same, but I’m not trying to create the ultimate Switch/Case framework, just playing around with c# to create something simple that may make the code easier to read (and fun to code). &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6978531" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Tutorials" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Tutorials/default.aspx" /><category term=".NET 3.5" scheme="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx" /><category term="c#" scheme="http://weblogs.asp.net/jdanforth/archive/tags/c_2300_/default.aspx" /></entry><entry><title>A Couple of Good Days at Microsoft Sweden TechDays</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/18/a-couple-of-good-days-at-microsoft-sweden-techdays.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/18/a-couple-of-good-days-at-microsoft-sweden-techdays.aspx</id><published>2009-03-18T21:59:30Z</published><updated>2009-03-18T21:59:30Z</updated><content type="html">&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://mailmaster.se/blog/wp-content/uploads/techdays.jpg" /&gt;It was a pleasant first day at TechDays, held in Västerås by Microsoft Sweden. During the day I met with and talked to people I know from before, people I’ve never met but follow on their blogs and some new acquaintances. Cheers to Samuel Kastberg, Pelle “Pellesoft” Johansson, Tomas Wirén, Johan and the guys at Dropit, Kai Fransson just to mention a few.&lt;/p&gt;  &lt;p&gt;I talked to &lt;a href="http://blogs.msdn.com/johanl/" target="_blank"&gt;Johan Lindfors&lt;/a&gt;, manager of the Microsoft DPE team in Sweden, who had a good presentation (the best I’ve seen so far actually) on Oslo together with &lt;a href="http://geekswithblogs.net/asmith/Default.aspx" target="_blank"&gt;Alan Smith&lt;/a&gt;. I ran into &lt;a href="http://blogs.msdn.com/akenine/" target="_blank"&gt;Daniel Akenine&lt;/a&gt;, chapter president of IASA Sweden and CTO of Microsoft Sweden. It’s always nice to talk to Daniel! &lt;/p&gt;  &lt;p&gt;Later in the evening I talked to &lt;a href="http://blogs.msdn.com/Tess/" target="_blank"&gt;Tess Ferrandez&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/fredriknormen/" target="_blank"&gt;Fredrik Normén&lt;/a&gt; about some common mistakes we’ve seen developers do, especially with ASP.NET. Tess had a good talk on the topic earlier that day together with &lt;a href="http://blogs.msdn.com/deurell/" target="_blank"&gt;Mikael Deurell&lt;/a&gt;, and Fredrik did a good one on what to expect for Silverlight in the future.&lt;/p&gt;  &lt;p&gt;Today I attended two talks with &lt;a href="http://blogs.thinktecture.com/cweyer/" target="_blank"&gt;Christian Weyer&lt;/a&gt; on WCF and on .NET Services and I got the chance to chat a few minutes about WCF interop and bindings to use with usernamepassword tokens which I will will try out soon. &lt;/p&gt;  &lt;p&gt;Earlier today I also listened to Ivar Jacobsen about “what they don’t teach you about software at school” and it was very entertaining. Ivar is so professional and full of experience and good knowledge it’s amazing and I have so much to thank him for, considering how much help I’ve had from his work on RUP, UML and so on. It was great to meet him.&lt;/p&gt;  &lt;p&gt;The day ended with a session on .NET Services, also by Christian Weyer, which was very, very cool. I have no idea how many moving parts he had going in his demos, but he was doing federated security, services and workflows in cloud and on his machine with azure and he had both .net clients and java clients going and you name it. I have to watch the presentation again when it’s available on the Internet later on.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6976583" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="Other" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Other/default.aspx" /><category term="TechDays" scheme="http://weblogs.asp.net/jdanforth/archive/tags/TechDays/default.aspx" /></entry><entry><title>Bad Request With WCF Service in Cassini On Windows 7 Beta</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/jdanforth/archive/2009/03/14/bad-request-with-wcf-service-in-cassini-on-windows-7-beta.aspx" /><id>http://weblogs.asp.net/jdanforth/archive/2009/03/14/bad-request-with-wcf-service-in-cassini-on-windows-7-beta.aspx</id><published>2009-03-14T15:29:41Z</published><updated>2009-03-14T15:29:41Z</updated><content type="html">&lt;p&gt;&lt;img title="Windows 7 Beta" border="0" alt="Windows 7 Beta" align="right" src="http://weblogs.asp.net/blogs/jdanforth/image_3D881299.png" width="244" height="154" /&gt;Trying to run a WCF service in Cassini on your Windows 7 Beta (7000) machine and get this error?&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier"&gt;The remote server returned an unexpected response: (400) Bad Request.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Unless you’re running your service with basic http binding or with security specifically set to None in your bindings, you will get this security-related error. This problem was &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/123f0d20-a018-48b0-ab92-4aae749f2d5e/" target="_blank"&gt;confirmed by Microsoft and will (hopefully) be fixed in next Windows 7 release&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The options you got:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create and run your own service host with code (I’ve been doing this in my integration tests until I tried Cassini and got the error)&lt;/li&gt;    &lt;li&gt;Use IIS (which I’m going to go for)&lt;/li&gt;    &lt;li&gt;Self-host it with WcfSvcHost.exe (which I’ve not tried yet)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Note that you need to add quite a few features to get WCF running in IIS running on Windows 7. See &lt;a href="http://weblogs.asp.net/jdanforth/archive/2009/03/14/turn-windows-7-features-on-or-off.aspx" target="_blank"&gt;my previous post about this&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.blackmarble.co.uk/blogs/rfennell/archive/2009/01/24/problem-hosting-wcf-using-cassini-on-windows-7.aspx" target="_blank"&gt;Richard Fennell&lt;/a&gt; had the same problems as well as a few others out there brave enough to try out a beta operating system.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6961243" width="1" height="1"&gt;</content><author><name>jdanforth</name><uri>http://weblogs.asp.net/members/jdanforth.aspx</uri></author><category term="WCF" scheme="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx" /><category term=".NET 3.5" scheme="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx" /><category term="Windows 7" scheme="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx" /></entry></feed>