<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>IBlog&amp;lt;Johan&amp;gt; : .NET 3.5</title><link>http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx</link><description>Tags: .NET 3.5</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Case Switching on CLR Types</title><link>http://weblogs.asp.net/jdanforth/archive/2009/03/19/case-switching-on-clr-types.aspx</link><pubDate>Thu, 19 Mar 2009 08:23:20 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6978531</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6978531</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2009/03/19/case-switching-on-clr-types.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Tutorials/default.aspx">Tutorials</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/c_2300_/default.aspx">c#</category></item><item><title>Bad Request With WCF Service in Cassini On Windows 7 Beta</title><link>http://weblogs.asp.net/jdanforth/archive/2009/03/14/bad-request-with-wcf-service-in-cassini-on-windows-7-beta.aspx</link><pubDate>Sat, 14 Mar 2009 15:29:41 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6961243</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6961243</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2009/03/14/bad-request-with-wcf-service-in-cassini-on-windows-7-beta.aspx#comments</comments><description>&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;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Turn Windows 7 Features On or Off</title><link>http://weblogs.asp.net/jdanforth/archive/2009/03/14/turn-windows-7-features-on-or-off.aspx</link><pubDate>Sat, 14 Mar 2009 13:35:30 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6960754</guid><dc:creator>jdanforth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6960754</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2009/03/14/turn-windows-7-features-on-or-off.aspx#comments</comments><description>&lt;p&gt;I’m trying to install/add IIS features to my Windows 7 beta build 7000 laptop. You got pretty fine grained control over these features in Windows 7, and it’s not easy to know what you really need. I need to run WCF services on my machine, so I’m turning most things on, including WCF Activation stuff:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/jdanforth/image_52146107.png" width="415" height="76" /&gt; &lt;/p&gt;  &lt;p&gt;Then I’m adding these things that I think I need for your average ASP.NET application:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/jdanforth/image_09E6A52B.png" width="380" height="551" /&gt; &lt;/p&gt;  &lt;p&gt;Finally I’m adding the management tools, including the IIS 6 compatibility stuff which I’ve been told is needed to play properly with VS2008:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/jdanforth/image_6F3A0911.png" width="383" height="218" /&gt; &lt;/p&gt;  &lt;p&gt;Then restart and make sure you got everything in place.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6960754" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Integration Testing WCF Services with Unity</title><link>http://weblogs.asp.net/jdanforth/archive/2009/01/30/integration-testing-wcf-services-with-unity.aspx</link><pubDate>Fri, 30 Jan 2009 09:36:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6869112</guid><dc:creator>jdanforth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6869112</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2009/01/30/integration-testing-wcf-services-with-unity.aspx#comments</comments><description>&lt;p&gt;I've been blogging a few times now about using Unity with WCF, but how do you integration test your service in an easy way without? The way I (and many others) do integration tests for a WCF service is by setting up my own service host and starting the service from test init:&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;   &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;TestClass&lt;/span&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;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceIntegrationTest&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;private&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceHost&lt;/span&gt; serviceHost;&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: #2b91af"&gt;ClassInitialize&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;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MyClassInitialize(&lt;span style="color: #2b91af"&gt;TestContext&lt;/span&gt; testContext)&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; serviceHost = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ServiceHost&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Service1&lt;/span&gt;), &lt;span style="color: blue"&gt;new&lt;/span&gt; [] { &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://127.0.0.1:8001/&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; serviceHost.AddServiceEndpoint(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;IService1&lt;/span&gt;), &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BasicHttpBinding&lt;/span&gt;(), &lt;span style="color: #a31515"&gt;&amp;quot;Service1&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; serviceHost.Open();&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: #2b91af"&gt;ClassCleanup&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;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MyClassCleanup()&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; serviceHost.Close();&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: #2b91af"&gt;TestMethod&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;void&lt;/span&gt; Should_get_data()&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;var&lt;/span&gt; ep = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;http://127.0.0.1:8001/Service1&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; &lt;span style="color: blue"&gt;var&lt;/span&gt; proxy = &lt;span style="color: #2b91af"&gt;ChannelFactory&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;IService1&lt;/span&gt;&amp;gt;.CreateChannel(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BasicHttpBinding&lt;/span&gt;(), ep);&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; data = proxy.GetData(1);&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;Assert&lt;/span&gt;.IsTrue(data == &lt;span style="color: #a31515"&gt;&amp;quot;You entered: 1&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;Got wrong data back, got - '&amp;quot;&lt;/span&gt; + data + &lt;span style="color: #a31515"&gt;&amp;quot;'&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;/div&gt;  &lt;p&gt;By doing it this way I don't have to make sure Cassini is started up before the test or having to deploy the service to a local IIS. There is no need for web.config or app.config files and I don't have to add any service reference. This way of doing integration testing of services is described by many others, and it should work quite well on a TFS build server or similar.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Integration Testing WCF Service with Unity&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A few blog posts away I wrote about &lt;a href="http://weblogs.asp.net/jdanforth/archive/2008/12/19/wcf-unity-and-nhibernate-first-findings.aspx" target="_blank"&gt;using Unity with WCF&lt;/a&gt;, but how do you integration test a setup like that? Remeber that if you have created your own ServiceHostFactory, you specify the factory to use in the .svc markup using the Factory attribute this:&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-US" style="font-size: 10pt; background: yellow; line-height: 115%; font-family: consolas; mso-bidi-font-family: &amp;#39;Times New Roman&amp;#39;; mso-highlight: yellow; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;%&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; line-height: 115%; font-family: consolas; mso-bidi-font-family: &amp;#39;Times New Roman&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;@&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; line-height: 115%; font-family: consolas; mso-bidi-font-family: &amp;#39;Times New Roman&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; &lt;span style="color: #a31515"&gt;ServiceHost&lt;/span&gt; &lt;span style="color: red"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Debug&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Factory&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;IRM.Patterns.UnityService.UnityServiceHostFactory&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;Service&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;WcfService3.Service1&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;CodeBehind&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Service1.svc.cs&amp;quot;&lt;/span&gt; &lt;span style="background: yellow; mso-highlight: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The &amp;quot;problem&amp;quot; here is that the factory doesn't have any decent public methods to let you create the service host from a given service type. True, there is a CreateServiceHost method which accepts a string representation of the type, but that means your service host factory has to have a reference to the type in question. The way I went around that small issue is by creating a small &amp;quot;harness&amp;quot; around the factory, with a public method which accepts a Type:&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&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;UnityServiceHostFactoryHarness&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;UnityServiceHostFactory&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: #2b91af"&gt;ServiceHost&lt;/span&gt; CreateServiceHost(&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; serviceType, &lt;span style="color: blue"&gt;string&lt;/span&gt; baseAddress)&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; CreateServiceHost(serviceType, &lt;span style="color: blue"&gt;new&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&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;Uri&lt;/span&gt;(baseAddress)&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&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; }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;A small change to the test-initialize method makes use of this test-harness:&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&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: #2b91af"&gt;ClassInitialize&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;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; MyClassInitialize(&lt;span style="color: #2b91af"&gt;TestContext&lt;/span&gt; testContext)&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;var&lt;/span&gt; serviceHostFactoryHarness = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;UnityServiceHostFactoryHarness&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; serviceHost = serviceHostFactoryHarness.CreateServiceHost(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Service1&lt;/span&gt;), &lt;span style="color: #a31515"&gt;&amp;quot;http://127.0.0.1:8001/&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; serviceHost.AddServiceEndpoint(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;IService1&lt;/span&gt;), &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BasicHttpBinding&lt;/span&gt;(), &lt;span style="color: #a31515"&gt;&amp;quot;Service1&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; serviceHost.Open();&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;/div&gt;  &lt;p&gt;Now we're running service integration tests and we have the Unity container loaded as well. I'm sure there are other, smarter and for me uknown ways of achieving the same, but it works for me :) If you want sample code for the UnityServiceHostFactory, please let me know, but know that my code is based on the &lt;a href="http://initializecomponent.blogspot.com/2008/06/unity-wcf-and-iis.html" target="_blank"&gt;this sample&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6869112" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Unit+Testing/default.aspx">Unit Testing</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Unity/default.aspx">Unity</category></item><item><title>WCF Client Calling ASMX Service with Soap Headers</title><link>http://weblogs.asp.net/jdanforth/archive/2008/10/27/wcf-client-calling-asmx-service-with-soap-headers.aspx</link><pubDate>Mon, 27 Oct 2008 11:29:31 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6706764</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6706764</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/10/27/wcf-client-calling-asmx-service-with-soap-headers.aspx#comments</comments><description>&lt;p&gt;Need to send soap headers from WCF (Service Reference) clients to older ASMX services? The ASMX service not handling the header properly? It may have to do with namespaces being set in the soap header XML in a way differently from what the ASMX service is expecting.&lt;/p&gt;  &lt;p&gt;So, how do you create and add the same type of headers, with the correct namespace, in a WCF client? For every outgoing call? &lt;/p&gt;  &lt;p&gt;First, a simple ASMX service for your pleasure to play with: &lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;   &lt;p style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;WebService&lt;/span&gt;(Namespace = &lt;span style="color: #a31515"&gt;&amp;quot;http://tempuri.org/&amp;quot;&lt;/span&gt;)]&lt;/p&gt;    &lt;p style="margin: 0px"&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;Service1&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;WebService&lt;/span&gt;&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: #2b91af"&gt;MyHeader&lt;/span&gt; myHeader;&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: #2b91af"&gt;WebMethod&lt;/span&gt;]&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;SoapHeader&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;myHeader&amp;quot;&lt;/span&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;string&lt;/span&gt; HelloWorld()&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;if&lt;/span&gt; (myHeader != &lt;span style="color: blue"&gt;null&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;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: #a31515"&gt;&amp;quot;Got header: &amp;quot;&lt;/span&gt; + myHeader.MyFirstValue + &lt;span style="color: #a31515"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + myHeader.MyOtherValue;&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;return&lt;/span&gt; &lt;span style="color: #a31515"&gt;&amp;quot;Got no header!!&amp;quot;&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;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;That's it on the server side. Over to the client side... Well, the header itself can be either a class which implements the &lt;em&gt;MessageHeader&lt;/em&gt; class, but I prefer to use a normal class decorated with &lt;em&gt;DataContract&lt;/em&gt; attribute. &lt;em&gt;&lt;strong&gt;Notice&lt;/strong&gt; the namespace property which matches the one on the service above&lt;/em&gt;:&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;   &lt;p style="margin: 0px"&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;(Namespace = &lt;span style="color: #a31515"&gt;&amp;quot;http://tempuri.org/&amp;quot;&lt;/span&gt;)]&lt;/p&gt;    &lt;p style="margin: 0px"&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;MyHeader&lt;/span&gt;&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: #2b91af"&gt;DataMember&lt;/span&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;string&lt;/span&gt; MyFirstValue { &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; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&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;string&lt;/span&gt; MyOtherValue { &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;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;In ASMX clients you normally create a soap extension to add the header to every outgoing call, but here the ASMX soap extension is replaced by a (Client)MessageInspector in WCF, which is added to a client endpoint via a behavior. I'm cramming the whole sample implementation into one class:&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;   &lt;p style="margin: 0px"&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;AddSoapHeaderBehavior&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;BehaviorExtensionElement&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;IClientMessageInspector&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;IEndpointBehavior&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;{&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; #region&lt;/span&gt; IClientMessageInspector Members&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;void&lt;/span&gt; AfterReceiveReply(&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Message&lt;/span&gt; reply, &lt;span style="color: blue"&gt;object&lt;/span&gt; correlationState) { }&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;object&lt;/span&gt; BeforeSendRequest(&lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Message&lt;/span&gt; request, &lt;span style="color: #2b91af"&gt;IClientChannel&lt;/span&gt; channel)&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;var&lt;/span&gt; myHeader = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MyHeader&lt;/span&gt; { MyFirstValue = &lt;span style="color: #a31515"&gt;&amp;quot;Yeeehaaaw!!&amp;quot;&lt;/span&gt;, MyOtherValue = &lt;span style="color: #a31515"&gt;&amp;quot;Gaaah!&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;span style="color: blue"&gt;var&lt;/span&gt; messageHeader = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;MessageHeader&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;MyHeader&lt;/span&gt;&amp;gt;() { Actor = &lt;span style="color: #a31515"&gt;&amp;quot;Anyone&amp;quot;&lt;/span&gt;, Content = myHeader };&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; request.Headers.Add(messageHeader.GetUntypedHeader(&lt;span style="color: #a31515"&gt;&amp;quot;MyHeader&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;http://tempuri.org/&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;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;null&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;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; #endregion&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; #region&lt;/span&gt; IEndpointBehavior Members&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;void&lt;/span&gt; AddBindingParameters(&lt;span style="color: #2b91af"&gt;ServiceEndpoint&lt;/span&gt; endpoint, &lt;span style="color: #2b91af"&gt;BindingParameterCollection&lt;/span&gt; bindingParameters) { }&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;void&lt;/span&gt; ApplyClientBehavior(&lt;span style="color: #2b91af"&gt;ServiceEndpoint&lt;/span&gt; serviceEndpoint, &lt;span style="color: #2b91af"&gt;ClientRuntime&lt;/span&gt; behavior) { behavior.MessageInspectors.Add(&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; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; ApplyDispatchBehavior(&lt;span style="color: #2b91af"&gt;ServiceEndpoint&lt;/span&gt; serviceEndpoint, &lt;span style="color: #2b91af"&gt;EndpointDispatcher&lt;/span&gt; endpointDispatcher) { }&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;void&lt;/span&gt; Validate(&lt;span style="color: #2b91af"&gt;ServiceEndpoint&lt;/span&gt; serviceEndpoint) { }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; #endregion&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; #region&lt;/span&gt; BehaviorExtensionElement Members&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;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt; CreateBehavior() { &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;AddSoapHeaderBehavior&lt;/span&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;override&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt; BehaviorType { &lt;span style="color: blue"&gt;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; GetType(); } }&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; #endregion&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;The endpointbehavior and behaviorextensionelement member implementations are just boilerplate stuff that should be hidden as default behavior by WCF if you ask me, but you need to type this out. &lt;/p&gt;  &lt;p&gt;Finally, the behavior must be loaded in the config (or via code):&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: consolas"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515"&gt;xml&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; ?&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyEndpointBehaviors&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ClientSoapHeaderAdderBehavior&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;extensions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;ClientSoapHeaderAdderBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&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&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyBehavior.AddSoapHeaderBehavior, MyBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;extensions&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;client&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpoint&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Service1Soap&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&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&gt;&lt;span style="color: red"&gt;address&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;http://localhost:4221/Service1.asmx&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&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&gt;&lt;span style="color: red"&gt;binding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;basicHttpBinding&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&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&gt;&lt;span style="color: red"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyEndpointBehaviors&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&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&gt;&lt;span style="color: red"&gt;contract&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;ClientProxy.Service1Soap&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;client&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;configuration&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hope it helps someone. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6706764" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/SoapExtension/default.aspx">SoapExtension</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Interop/default.aspx">Interop</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>LINQ to XML in VB.NET and Using the Right Language for the Job</title><link>http://weblogs.asp.net/jdanforth/archive/2008/10/15/linq-to-xml-in-vb-net-and-using-the-right-language-for-the-job.aspx</link><pubDate>Wed, 15 Oct 2008 11:17:50 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6682010</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6682010</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/10/15/linq-to-xml-in-vb-net-and-using-the-right-language-for-the-job.aspx#comments</comments><description>&lt;p&gt;I'm almost always using C# in my .NET projects, unless I'm doing Office automation where the VB-way of dealing with optional parameters helps out making the code a bit cleaner. &lt;/p&gt;  &lt;p&gt;The last week we've been upgrading ASMX-clients to become WCF-clients for a number of old .NET 1.1 and 2.0 projects, and we ended up with a bunch of app.config files with loads and loads of WCF client endpoint sections, each of them pointing at their own binding configuration. To manually clean this up would take hours and hours of tedious work which would probably result in more than a few errors.&lt;/p&gt;  &lt;p&gt;So I thought maybe I could do search/replace with a regexp-capable editor... or try out XML Literals in VB.NET. I wanted to remove old behaviors, extensions and bindings, then add my own behaviors and extensions and finally change some attributes on each client endpoint. Doing this with XML Literals and XDocument/XElement in VB.NET was quite straight forward and didn't result in too many lines of code:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.Xml.Linq
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.IO
&lt;span style="color: rgb(0,0,255)"&gt;Imports&lt;/span&gt; System.Linq&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;    &lt;span style="color: rgb(0,0,255)"&gt;Sub&lt;/span&gt; FixupConfig(&lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; infile &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;String&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;ByVal&lt;/span&gt; outfile &lt;span style="color: rgb(0,0,255)"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;String&lt;/span&gt;)
        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; defaultBindingConfigurationXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;binding&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;defaultBindingConfiguration&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxBufferSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;1065536&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxBufferPoolSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;524288&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;
&lt;/span&gt;                                              &lt;span style="color: rgb(185,100,100)"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;1065536&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;

&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; behaviorsXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                               &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behavior&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;FacadeSoapEndpointBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;SetMaxFaultSizeBehavior&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;size&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;100000&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                       &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;ClientExceptionHandlerBehavior&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                   &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behavior&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                               &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                           &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviors&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;

&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; extensionsXml = &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;extensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                                    &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;add&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;SetMaxFaultSizeBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: rgb(185,100,100)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;SomeType.SetMaxFaultSizeBehavior, SomeAssembly, Version=1.0.0.0, &lt;br /&gt;Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                    &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;add&lt;/span&gt; &lt;span style="color: rgb(185,100,100)"&gt;name&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;ClientExceptionHandlerBehavior&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: rgb(185,100,100)"&gt;type&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;=&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&lt;span style="color: rgb(100,100,185)"&gt;SomeType.&lt;/span&gt;ClientExceptionHandler, SomeAssembly, Version=1.0.0.0, &lt;br /&gt;Culture=neutral, PublicKeyToken=null&lt;/span&gt;&lt;span style="color: rgb(85,85,85)"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;/&amp;gt;
&lt;/span&gt;                                &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;                            &lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(132,70,70)"&gt;extensions&lt;/span&gt;&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;


&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; xdoc = XDocument.Load(infile)

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;behaviors&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Remove()
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;extensions&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Remove()

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().AddFirst(extensionsXml)
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().AddFirst(behaviorsXml)

        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;bindings&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;basicHttpBinding&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Descendants.Remove()
        xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;system.serviceModel&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;bindings&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;basicHttpBinding&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.Single().Add(defaultBindingConfigurationXml)

        &lt;span style="color: rgb(0,0,255)"&gt;Dim&lt;/span&gt; elems = xdoc...&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;client&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color: rgb(100,100,185)"&gt;&amp;lt;&lt;/span&gt;endpoint&lt;span style="color: rgb(100,100,185)"&gt;&amp;gt;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;For&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Each&lt;/span&gt; element &lt;span style="color: rgb(0,0,255)"&gt;In&lt;/span&gt; elems
            element.&lt;span style="color: rgb(100,100,185)"&gt;@&lt;/span&gt;bindingConfiguration = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;defaultBindingConfiguration&amp;quot;
&lt;/span&gt;            element.&lt;span style="color: rgb(100,100,185)"&gt;@&lt;/span&gt;behaviorConfiguration = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;FacadeSoapEndpointBehavior&amp;quot;
&lt;/span&gt;        &lt;span style="color: rgb(0,0,255)"&gt;Next

&lt;/span&gt;        xdoc.Save(outfile)

    &lt;span style="color: rgb(0,0,255)"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;Sub
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;I've heard people recommend to use VB.NET when dealing with XML and I agree - use the right language for the job. When doing this - remember to import System.Linq or you'll miss some vital extensions like the .Add() and .Single() methods ;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6682010" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/XML/default.aspx">XML</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>ASP.NET MVC Preview 5 Released</title><link>http://weblogs.asp.net/jdanforth/archive/2008/08/30/asp-net-mvc-preview-5-released.aspx</link><pubDate>Sat, 30 Aug 2008 14:18:42 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6580539</guid><dc:creator>jdanforth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6580539</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/08/30/asp-net-mvc-preview-5-released.aspx#comments</comments><description>&lt;p&gt;Hey, I'm just helping to spread the word! A sampled a few links and quotes that has already been posted to blogosphere for your pleasure and knowledge. :)&lt;/p&gt;  &lt;p&gt;Download it here -&amp;gt; &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16775"&gt;http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16775&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://haacked.com/archive/2008/08/29/asp.net-mvc-codeplex-preview-5-released.aspx" target="_blank"&gt;Phil Haack said&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;We didn&amp;#8217;t originally plan to have another preview. However, we implemented a few significant chunks of functionality and were dying to get feedback so that we could incorporate it into the product before Beta. It helps that with five or so of these interim releases, we&amp;#8217;ve become pretty efficient producing these releases.&lt;/p&gt;    &lt;p&gt;We plan to have our next release be our official &lt;a href="http://haacked.com/archive/2008/08/15/understanding-beta.aspx"&gt;Beta&lt;/a&gt;, which means we&amp;#8217;ll have a lot more test passes to produce and run before we release the next one.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Some preview 5 related blog posts:&lt;/p&gt;  &lt;p&gt;Brad Wilson wrote about &lt;a href="http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html" target="_blank"&gt;changes to partial rendering and view engine in preview 5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Maarten Balliauw wrote about &lt;a href="http://blog.maartenballiauw.be/post/2008/08/29/Form-validation-with-ASPNET-MVC-preview-5.aspx" target="_blank"&gt;easier form validation with preview 5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Nick Berardi has a &lt;a href="http://www.coderjournal.com/2008/08/aspnet-mvc-preview-release-5/" target="_blank"&gt;list of news and changes&lt;/a&gt; and also a few issues he's found and submitted bug reports for:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2201"&gt;AcceptVerbAttribute Not Following HTTP Standards&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2202"&gt;ActionMethod Missing From ActionExecutingContext&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Derik Whittaker had a &lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2008/08/29/asp-net-mvc-drop-5-has-been-released.aspx" target="_blank"&gt;few comments regarding sealed classes in preview 5&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;It looks like that they removed the sealed keyword from many of the Attributes such as HandleErrorAttribute, AuthorizeAttribute and various other existing Attributes.&amp;#160; &lt;/p&gt;    &lt;p&gt;However, looks like many of the other attributes (some new, some not) such as AcceptVerbsAttribute, ModelBinderAttribute and NonActionAttribute are still marked as sealed.&amp;#160; Guys, please unseal all your stuff.&amp;#160; If you have a very, very, very valid reason then fine seal them.&amp;#160; But if not, let developers loose and unseal them.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6580539" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>Auto Postback with Javascript in ASP.NET MVC</title><link>http://weblogs.asp.net/jdanforth/archive/2008/08/28/auto-postback-with-javascript-in-asp-net-mvc.aspx</link><pubDate>Thu, 28 Aug 2008 12:20:53 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6573847</guid><dc:creator>jdanforth</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6573847</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/08/28/auto-postback-with-javascript-in-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;I've looked this up twice now so I'm posting it to my blog for future reference and as a quick-tip for others. Say you got a web page with a dropdown/select listbox and you want to reload/auto postback the page when the selection changes.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="94" alt="image" src="http://weblogs.asp.net/blogs/jdanforth/WindowsLiveWriter/AutoPostbackwithJavascriptinASP.NETMVC_C410/image_3.png" width="207" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;One way to do this without involving a Javascript or Ajax library like jQuery (which probably is a good idea anyway :) is to use the &amp;quot;htmlAttributes&amp;quot; parameter of the Html.DropDownList() helper method and add a &amp;quot;onchange&amp;quot; attribute through an anonymous type. Something like this:&lt;/p&gt;  &lt;pre class="code"&gt;    Select a name: &lt;span style="background: rgb(255,238,98)"&gt;&amp;lt;%&lt;span style="color: rgb(0,0,255)"&gt;&lt;/span&gt;=&lt;/span&gt;Html.DropDownList(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, ViewData.Model, &lt;br /&gt;&lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; { onchange = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;doSomeJavascript()&amp;quot;&lt;/span&gt; })&lt;span style="background: rgb(255,238,98)"&gt;%&amp;gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;To submit a form, for example:&lt;/p&gt;

&lt;pre class="code"&gt;    &lt;span style="background: rgb(255,238,98)"&gt;&amp;lt;%&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;using&lt;/span&gt; (Html.Form&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;HomeController&lt;/span&gt;&amp;gt;(p =&amp;gt; p.DropDown(), &lt;br /&gt;        &lt;span style="color: rgb(43,145,175)"&gt;FormMethod&lt;/span&gt;.Post, &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; { id = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;myform&amp;quot;&lt;/span&gt; }))
       {&lt;span style="background: rgb(255,238,98)"&gt;%&amp;gt;
&lt;/span&gt;    Select a name: &lt;span style="background: rgb(255,238,98)"&gt;&amp;lt;%&lt;span style="color: rgb(0,0,255)"&gt;&lt;/span&gt;=&lt;/span&gt;Html.DropDownList(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;, ViewData.Model, &lt;br /&gt;        &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; { onchange = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;document.getElementById('myform').submit()&amp;quot;&lt;/span&gt; })&lt;span style="background: rgb(255,238,98)"&gt;%&amp;gt;
&lt;/span&gt;    &lt;span style="background: rgb(255,238,98)"&gt;&amp;lt;%&lt;/span&gt;  } &lt;span style="background: rgb(255,238,98)"&gt;%&amp;gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The minimal DropDown() method of the HomeController class to support this sample looks like this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;object&lt;/span&gt; DropDown()
{
    &lt;span style="color: rgb(0,0,255)"&gt;var&lt;/span&gt; list = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt;&amp;gt; { &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Adam&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Bob&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Charlie&amp;quot;&lt;/span&gt; };
    &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; View(&lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SelectList&lt;/span&gt;(list, Request[&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;] ?? list.First()));
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;As you can see, the htmlAttributes parameter is available on many of the Html-helper methods and I'm using ot to add a name attribute to the HTML form as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;End Note About Basic Knowledge of Javascript and Html&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Heh, ASP.NET MVC sure forces you to dust off that old, basic knowledge of HTML and Javascript that I think every web developer should have but the ASP.NET programming model has made us forgot... One could argue that it's niggy gritty stuff that we shouldn't have to worry about, but for me it feels good to know I'm in full control of the generated HTML and I'm not sending one byte more on the wire than what's needed. Yes, it's possible to have the same control with standard ASP.NET applications and controls, but I've seen experienced developers make mistakes around this more than once. ViewState anyone? :D&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6573847" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>Returning Json from RESTful Interface with WCF</title><link>http://weblogs.asp.net/jdanforth/archive/2008/08/23/returning-json-from-restful-interface-with-wcf.aspx</link><pubDate>Sat, 23 Aug 2008 14:18:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6556458</guid><dc:creator>jdanforth</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6556458</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/08/23/returning-json-from-restful-interface-with-wcf.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/jdanforth/WindowsLiveWriter/ReturningJsonfromRESTfulInterfacewithWCF_E348/WCF2_2.jpg" mce_href="http://weblogs.asp.net/blogs/jdanforth/WindowsLiveWriter/ReturningJsonfromRESTfulInterfacewithWCF_E348/WCF2_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="154" alt="WCF2" src="http://weblogs.asp.net/blogs/jdanforth/WindowsLiveWriter/ReturningJsonfromRESTfulInterfacewithWCF_E348/WCF2_thumb.jpg" width="167" align="right" border="0" mce_src="http://weblogs.asp.net/blogs/jdanforth/WindowsLiveWriter/ReturningJsonfromRESTfulInterfacewithWCF_E348/WCF2_thumb.jpg" /&gt;&lt;/a&gt; Someone commented on an &lt;a href="http://weblogs.asp.net/jdanforth/archive/2008/08/09/more-on-restful-service-with-wcf-and-pox-poco.aspx" target="_blank" mce_href="http://weblogs.asp.net/jdanforth/archive/2008/08/09/more-on-restful-service-with-wcf-and-pox-poco.aspx"&gt;earlier blog post I did on REST, POX/POJO and WCF&lt;/a&gt; and the comment read:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;How about REST WCF bits from .NET 3.5 SP1? Is it possible now to let the user decide in which format he wants the response (xml or json) like MySpace API for example?&lt;/p&gt;    &lt;p&gt;The convention is to use a file like extension at the end of the resource to specify data return type (.xml or .json)&lt;/p&gt;    &lt;p&gt;&lt;a href="http://api.myspace.com/v1/users/378145025/details.xml" mce_href="http://api.myspace.com/v1/users/378145025/details.xml"&gt;api.myspace.com/.../details.xml&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://api.myspace.com/v1/users/378145025/details.json" mce_href="http://api.myspace.com/v1/users/378145025/details.json"&gt;api.myspace.com/.../details.json&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;UPDATE/EDIT:&lt;/strong&gt; Turns out I was doing this the hard way as there is support for json serialization right from the ServiceContract which makes this extremely easy. Just make sure to specify the ResponseFormat to be json. In a previous &amp;quot;version&amp;quot; of this blog post, I used the JavaScriptSerializer class, which is... dumb :)&lt;/p&gt;  &lt;p&gt;First go take a look at the &lt;a href="http://blogs.msdn.com/kaevans/archive/2008/04/03/creating-restful-services-using-wcf.aspx" target="_blank" mce_href="http://blogs.msdn.com/kaevans/archive/2008/04/03/creating-restful-services-using-wcf.aspx"&gt;sample that Kirk Evans had on his blog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note that it may be easier to create a RESTful interface with ASP.NET MVC if you're into that tech, but that's another blog post.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;So, first I'm modifying the REST interface somewhat, adding support for &lt;strong&gt;/details.xml&lt;/strong&gt; and &lt;strong&gt;/details.json&lt;/strong&gt; URI:&lt;/p&gt;  &lt;pre class="code"&gt;[&lt;span style="color: rgb(43,145,175)"&gt;ServiceContract&lt;/span&gt;]
&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;interface&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;IService
&lt;/span&gt;{
    [&lt;span style="color: rgb(43,145,175)"&gt;OperationContract&lt;/span&gt;]
    [&lt;span style="color: rgb(43,145,175)"&gt;WebGet&lt;/span&gt;(UriTemplate=&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;customers/{id}/details.xml&amp;quot;&lt;/span&gt;)]
    &lt;span style="color: rgb(43,145,175)"&gt;Customer&lt;/span&gt; GetCustomer(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; id);

    [&lt;span style="color: rgb(43,145,175)"&gt;OperationContract&lt;/span&gt;]
    [&lt;span style="color: rgb(43,145,175)"&gt;WebGet&lt;/span&gt;(UriTemplate = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;customers/{id}/details.json&amp;quot;&lt;/span&gt;, &lt;br /&gt;            ResponseFormat=&lt;span style="color: rgb(43,145,175)"&gt;WebMessageFormat&lt;/span&gt;.Json)]&lt;br /&gt;    &lt;span style="color: rgb(43,145,175)"&gt;Customer&lt;/span&gt; GetJsonCustomer(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; id);
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;As you can see, on the GetJsonCustomer() method, I'm specifying the ResponseFormat to be json. That's it :)&lt;/p&gt;

&lt;p&gt;A sample implementation for this interface looks like this:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Customer&lt;/span&gt; GetCustomer(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; id)
{
    &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Customer&lt;/span&gt; { ID = id, Name = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Demo User&amp;quot;&lt;/span&gt; };
}

&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;Customer&lt;/span&gt; GetJsonCustomer(&lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; id)
{
    &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; GetCustomer(id);&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;&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" mce_href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;Using Fiddler to simulate client request and see what comes out of our RESTful service, we get this result from the &lt;strong&gt;/customers/123/details.xml&lt;/strong&gt; request:&lt;/p&gt;

&lt;p&gt;&amp;#160; &amp;lt;Customer xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/RESTfulWCF&amp;quot; xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&amp;gt;&amp;lt;ID&amp;gt;1&amp;lt;/ID&amp;gt;&amp;lt;Name&amp;gt;Demo User&amp;lt;/Name&amp;gt;&amp;lt;/Customer&amp;gt;&lt;/p&gt;

&lt;p&gt;...and this from the &lt;strong&gt;/customers/123/details.json&lt;/strong&gt; request:&lt;/p&gt;

&lt;p&gt;&amp;#160; {&amp;quot;ID&amp;quot;:&amp;quot;123&amp;quot;,&amp;quot;Name&amp;quot;:&amp;quot;Demo User&amp;quot;}&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6556458" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/REST/default.aspx">REST</category></item><item><title>More on RESTful Service with WCF and POX/POCO</title><link>http://weblogs.asp.net/jdanforth/archive/2008/08/09/more-on-restful-service-with-wcf-and-pox-poco.aspx</link><pubDate>Sat, 09 Aug 2008 13:55:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6498733</guid><dc:creator>jdanforth</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6498733</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/08/09/more-on-restful-service-with-wcf-and-pox-poco.aspx#comments</comments><description>&lt;P&gt;Kirk Eveans wrote a blog post about &lt;A href="http://blogs.msdn.com/kaevans/archive/2008/04/03/creating-restful-services-using-wcf.aspx" target=_blank mce_href="http://blogs.msdn.com/kaevans/archive/2008/04/03/creating-restful-services-using-wcf.aspx"&gt;Creating RESTful Services Using WCF&lt;/A&gt;, which gives you a good understanding of how to get started with REST on WCF. In his sample, Kirk has 2 methods in a REST interface:&lt;/P&gt;&lt;PRE class=code&gt;[&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ServiceContract&lt;/SPAN&gt;]
&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;IService
&lt;/SPAN&gt;{
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;OperationContract&lt;/SPAN&gt;]
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;WebGet&lt;/SPAN&gt;(UriTemplate = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"customers/{id}"&lt;/SPAN&gt;)]
    &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer&lt;/SPAN&gt; GetCustomer(&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt; id);

    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;OperationContract&lt;/SPAN&gt;]
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;WebInvoke&lt;/SPAN&gt;(UriTemplate = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"customers"&lt;/SPAN&gt;)]
    &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer&lt;/SPAN&gt; PostCustomer(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer&lt;/SPAN&gt; c);
}&lt;/PRE&gt;
&lt;P&gt;The Data Contract for Customer looks like this:&lt;/P&gt;&lt;PRE class=code&gt;[&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DataContract&lt;/SPAN&gt;(Namespace = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;""&lt;/SPAN&gt;)]
&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer
&lt;/SPAN&gt;{
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DataMember&lt;/SPAN&gt;]
    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt; ID { &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set&lt;/SPAN&gt;; }
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DataMember&lt;/SPAN&gt;]
    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt; Name { &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set&lt;/SPAN&gt;; }
}&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Kirk also describes how to use the &lt;A href="http://www.fiddlertool.com/" target=_blank mce_href="http://www.fiddlertool.com"&gt;Fiddler tool&lt;/A&gt; to send REST request to the service, which is a wonderful tool for these circumstances.&lt;/P&gt;
&lt;P&gt;Now, to get the customer with ID 123, just send a GET request to the url: &lt;STRONG&gt;http://127.0.0.1:8000/customers/123&lt;/STRONG&gt; and the service will return:&lt;/P&gt;&lt;PRE class=code&gt;&amp;lt;Customer&amp;gt;&lt;BR&gt;  &amp;lt;ID&amp;gt;123&amp;lt;/ID&amp;gt;&lt;BR&gt;  &amp;lt;Name&amp;gt;Demo User&amp;lt;/Name&amp;gt;&lt;BR&gt;&amp;lt;/Customer&amp;gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;To call the other method, PostCustomer(), send a POST request to &lt;STRONG&gt;http://127.0.0.1/customers&lt;/STRONG&gt; with the following request body:&lt;/P&gt;&lt;PRE class=code&gt;&amp;lt;Customer&amp;gt;&lt;BR&gt;  &amp;lt;ID&amp;gt;123&amp;lt;/ID&amp;gt;&lt;BR&gt;  &amp;lt;Name&amp;gt;Demo User&amp;lt;/Name&amp;gt;&lt;BR&gt;&amp;lt;/Customer&amp;gt;&lt;/PRE&gt;
&lt;P&gt;This returns:&lt;/P&gt;&lt;PRE class=code&gt;&amp;lt;Customer xmlns:i="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;BR&gt;  &amp;lt;ID&amp;gt;123&amp;lt;/ID&amp;gt;&lt;BR&gt;  &amp;lt;Name&amp;gt;Hello, Demo User&amp;lt;/Name&amp;gt;&lt;BR&gt;&amp;lt;/Customer&amp;gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;NOTE:&lt;/STRONG&gt; Remember that you must add a HTTP header, specifying the content type, or the POST request will fail (Content-Type: application/xml).&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Wrong Order of Nodes?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;But what if the programmer sends the &amp;lt;Name&amp;gt; node before the &amp;lt;ID&amp;gt; node? Like this:&lt;/P&gt;&lt;PRE class=code&gt;&amp;lt;Customer&amp;gt;&lt;BR&gt;  &amp;lt;Name&amp;gt;Demo User&amp;lt;/Name&amp;gt;&lt;BR&gt;  &amp;lt;ID&amp;gt;123&amp;lt;/ID&amp;gt;&lt;BR&gt;&amp;lt;/Customer&amp;gt;&lt;/PRE&gt;
&lt;P&gt;The service will then return:&lt;/P&gt;&lt;PRE class=code&gt;&amp;lt;Customer xmlns:i="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;BR&gt;  &amp;lt;ID i:nil="true"/&amp;gt;&lt;BR&gt;  &amp;lt;Name&amp;gt;Hello, Demo User&amp;lt;/Name&amp;gt;&lt;BR&gt;&amp;lt;/Customer&amp;gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Note that the ID is null! If the ID was declared as an integer in the Data Contract, the response from the service would be:&lt;/P&gt;&lt;PRE class=code&gt;&amp;lt;Customer xmlns:i="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;BR&gt;  &amp;lt;ID&amp;gt;0&amp;lt;/ID&amp;gt;&lt;BR&gt;  &amp;lt;Name&amp;gt;Hello, Demo User&amp;lt;/Name&amp;gt;&lt;BR&gt;&amp;lt;/Customer&amp;gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Note that ID is 0 (zero), which could become a somewhat hard bug to catch. I asked Kirk about this and he confirmed the reason for this behaviour is the way the DataContractSerializer works. If no order is specified in the DataContract, it will (de)serialize in alphabetic order. If this is a problem for you, there is away around it by specifying the XmlSerializerFormat attribute on the REST interface:&lt;/P&gt;&lt;PRE class=code&gt;[&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;ServiceContract&lt;/SPAN&gt;]
&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;IService
&lt;/SPAN&gt;{
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;OperationContract&lt;/SPAN&gt;]
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;WebGet&lt;/SPAN&gt;(UriTemplate = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"customers/{id}"&lt;/SPAN&gt;)]
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;XmlSerializerFormat&lt;/SPAN&gt;]
    &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer&lt;/SPAN&gt; GetCustomer(&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt; id);

    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;OperationContract&lt;/SPAN&gt;]
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;WebInvoke&lt;/SPAN&gt;(UriTemplate = &lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"customers"&lt;/SPAN&gt;)]
    [&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;XmlSerializerFormat&lt;/SPAN&gt;]
    &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer&lt;/SPAN&gt; PostCustomer(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer&lt;/SPAN&gt; c);
}&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;&lt;STRONG&gt;POCO Support in SP1&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;One of the new features in .NET 3.5 SP1 is the support for POCOs - the DataContractSerializer supports serializing types that doesn't have the [DataContract] or [Serializable] attributes. &lt;A href="http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx" target=_blank mce_href="http://www.pluralsight.com/community/blogs/aaron/archive/2008/05/13/50934.aspx"&gt;Aaron Skonnard has a good post on this.&lt;/A&gt; This means you can safely get rid of the attributes on the Customer class:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Customer
&lt;/SPAN&gt;{
    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt; ID { &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set&lt;/SPAN&gt;; }
    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;string&lt;/SPAN&gt; Name { &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get&lt;/SPAN&gt;; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set&lt;/SPAN&gt;; }
}&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Note that the DataContractSerializer is still picky about the XML it gets to be able to deserialize it properly. Again, to get a more "relaxed" REST interface where WCF accepts the Name and ID nodes in any order, use the XmlSerializerFormat. I'm not sure this is what you want, but it's an option.&lt;/P&gt;
&lt;P&gt;I had a short mail conversation with Kirk about this, and he raised an interesting question about the lack of a industry accepted standard for describing RESTful services and I think he's right there. The XML-node order wouldn't be a problem at all if I gave the client programmer a schema or a contract which specified exactly how the RESTful interface was to be accessed and in which order the XML-nodes must come. Kirk had a lot to say about this, and I do hope he writes up a blog post about his thoughts ;)&lt;/P&gt;
&lt;P&gt;There are ways to send and receive any XML to a RESTful interface with WCF, and I'll write a blog post about that another day.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6498733" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/WCF/default.aspx">WCF</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/REST/default.aspx">REST</category></item><item><title>ThreadPool.QueueUserWorkItem with Anonymous Types</title><link>http://weblogs.asp.net/jdanforth/archive/2008/07/03/threadpool-queueuserworkitem-with-anonymous-types.aspx</link><pubDate>Thu, 03 Jul 2008 09:10:25 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6352586</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6352586</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/07/03/threadpool-queueuserworkitem-with-anonymous-types.aspx#comments</comments><description>&lt;p&gt;I thought &lt;a href="http://thevalerios.net/matt/2008/05/use-threadpoolqueueuserworkitem-with-anonymous-types" target="_blank"&gt;this blog post by Matt Valerio&lt;/a&gt; was good, and it gave me a few ideas to use in a current test project. He wrote a helper method to be able to use anonymous types when calling a delegate or lambda in the ThreadPool:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;delegate&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;WaitCallback&lt;/span&gt;&amp;lt;T&amp;gt;(T state);

&lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ThreadPoolHelper
&lt;/span&gt;{
    &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;static&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;bool&lt;/span&gt; QueueUserWorkItem&amp;lt;T&amp;gt;(T state, &lt;span style="color: rgb(43,145,175)"&gt;WaitCallback&lt;/span&gt;&amp;lt;T&amp;gt; callback)
    {
        &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ThreadPool&lt;/span&gt;.QueueUserWorkItem(s =&amp;gt; callback((T)s), state);
    }
}&lt;/pre&gt;

&lt;p&gt;And his example code for using this method:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: rgb(43,145,175)"&gt;ThreadPoolHelper&lt;/span&gt;.QueueUserWorkItem(
    &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; { Name = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;Matt&amp;quot;&lt;/span&gt;, Age = 26 },
    (data) =&amp;gt;
    {
        &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; name = data.Name;
        &lt;span style="color: rgb(0,0,255)"&gt;int&lt;/span&gt; age = data.Age;
        &lt;span style="color: rgb(0,128,0)"&gt;// Long-running computation
&lt;/span&gt;    });&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Cute, eh? &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6352586" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>ASP.NET MVC Supporting IronRuby and IronPython</title><link>http://weblogs.asp.net/jdanforth/archive/2008/06/04/asp-net-mvc-supporting-ironruby-and-ironpython.aspx</link><pubDate>Wed, 04 Jun 2008 12:29:42 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6247332</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6247332</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/06/04/asp-net-mvc-supporting-ironruby-and-ironpython.aspx#comments</comments><description>&lt;p&gt;I just picked up this answer to a &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/06/01/asp-net-mvc-support-with-visual-web-developer-2008-express.aspx#6240898" target="_blank"&gt;comment on ScottGu's blog&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I believe we will be showing using ASP.NET MVC with IronRuby and IronPython later this week at TechEd.&amp;#160; I don't think we've finalized what the tooling support will be - but you will be able to use these as language options with ASP.NET.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It would have been cool to be at TechEd... &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6247332" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Ruby/default.aspx">Ruby</category></item><item><title>A .NET Guy Looking at Some Ruby (Part 2)</title><link>http://weblogs.asp.net/jdanforth/archive/2008/04/20/a-net-guy-looking-at-some-ruby-part-2.aspx</link><pubDate>Sun, 20 Apr 2008 13:23:23 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6115127</guid><dc:creator>jdanforth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6115127</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/04/20/a-net-guy-looking-at-some-ruby-part-2.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;This is me continuing scribbling down notes as I go along relearning lost Ruby skills and at the same time comparing the Ruby syntax and way of writing code to .NET. In my &lt;a href="http://weblogs.asp.net/jdanforth/archive/2008/04/18/a-net-guy-looking-at-some-ruby.aspx" target="_blank"&gt;previous post&lt;/a&gt; I very briefly went through the basics of variables, loops, iterators, conditionals and basic sorting. This post will look at classes, methods, inheritance and how to reuse Ruby code with include (require) statements.      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Methods     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Method or function declaration in Ruby is simple, perhaps even simpler than how VB does it:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;my_method&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;Hello &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;.&lt;/b&gt;to_s      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;my_method&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;johan&amp;quot;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;my_method&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;johan&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;As you can see, you may call the method with or without parenthesis, to Ruby it doesn&amp;#8217;t matter. I&amp;#8217;ll have to read some more Ruby code to see if there are any exceptions or aesthetic rules to using parenthesis or not, but it seems that many Rubians use parenthesis when calling functions or methods on objects/classes, but leaving it when calling simple methods like puts and similar:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Oh, and Ruby doesn&amp;#8217;t support method overloading! There are ways around this with default method parameters, add-ons to the language and so on, but basically &amp;#8211; no method overloading. I&amp;#8217;ll show some sample code later on when I get to class initialization.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Classes, Constructors and Properties     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Ruby is of course object oriented, and very much so (without going into the &amp;#8220;where everything is an object&amp;#8221; speech). So, of course you can declare objects with properties and methods on them. Declaring a class is familiar:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;MyClass       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;You instantiate a class using a built in static &amp;#8220;new&amp;#8221; method on the class:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;a_class&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;MyClass&lt;b&gt;.&lt;/b&gt;new&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Adding a (instance) method to the class is straight forward:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;MyClass       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;hello&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Static methods, or class methods, are declared by prefixing the method with &amp;#8220;self.&amp;#8221;, like this:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;self&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;reverse_upcase&lt;b&gt;(&lt;/b&gt;name&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;.&lt;/b&gt;reverse&lt;b&gt;.&lt;/b&gt;upcase      &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Adding a constructor or initializer to the class is done by declaring an initialize function:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;initialize&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;As constructor overloading is not possible, you&amp;#8217;ll have to add a default value to the parameter, making it optional in a VB-style of way:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;initialize&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;Anonymous&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The @name variable is called an object variable and it is distinguished by the use of the &amp;#8216;@&amp;#8217; sign. There is no need to declare the object variable in any other way, but to access the object variable (or property or attribute or&amp;#8230;) you have to add property accessor code to the class:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name=&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Now, class properties is used so much that there is a so called attribute accessor keyword available for you in Ruby, making things a bit simple to type:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;attr_accessor&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #c0a030; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;:name&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;There are also other attribute keywords like attr_reader and attr_writer available for your pleasure.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Inheritance     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Last thing to say about the basics around classes in Ruby is how to handle inheritance. The syntax is similar to c#, but instead of a colon (:), use the less than (&amp;lt;) operator. A very simple example of where the class Employee inherits from Person could look like this:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;Person       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;attr_accessor&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #c0a030; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;:name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;initialize&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;Employee&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&amp;lt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;Person     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;attr_accessor&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #c0a030; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;:number&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;initialize&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;number&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;name     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@number&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;number     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;def&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;to_s       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot; (emp# &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #b00080; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;@number&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;)&amp;quot;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;e&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;Employee&lt;b&gt;.&lt;/b&gt;new&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;Johan&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;e     &lt;br /&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;e&lt;b&gt;.&lt;/b&gt;is_a?&lt;b&gt;(&lt;/b&gt;Person&lt;b&gt;)       &lt;br /&gt;&lt;/b&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;e&lt;b&gt;.&lt;/b&gt;is_a?&lt;b&gt;(&lt;/b&gt;Employee&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Would print:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: " courier new"; mso-ansi-language: EN-US"&gt;Johan (emp# 123)     &lt;br /&gt;true      &lt;br /&gt;true      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Class Reuse     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;If you want to &amp;#8220;use&amp;#8221; or &amp;#8220;include&amp;#8221; Ruby code you&amp;#8217;ve already written? Save your code (class) into a MyClass.rb file (as an example) and add a &amp;#8220;require&amp;#8221; statement to the top of your code where you want to reuse the MyClass class:     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt;require&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " verdana","sans-serif"; mso-ansi-language: EN-US; mso-bidi-font-family: Verdana"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " courier new"; mso-ansi-language: EN-US"&gt;&amp;quot;MyClass&amp;quot;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;and classes in the MyClass.rb file will become available for you.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Wrapping Up     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;I guess that&amp;#8217;s enough for now. I think this will be enough to be able to understand some Ruby code if you come across it, unless it contains too many weird class methods like Array#flatten and such &lt;/span&gt;&lt;span lang="EN-US" style="font-family: wingdings; mso-ansi-language: en-us; mso-ascii-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: calibri; mso-hansi-theme-font: minor-latin; mso-char-type: symbol; mso-symbol-font-family: wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;. Then there are a bunch of modules available to Ruby for doing a number of things. I may get into that in a later blog post, I&amp;#8217;ll see.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;All in all I think Ruby is cool. I&amp;#8217;ve used dynamic languages and scripting languages before, but nothing as sleek as Ruby. Ruby is minimal code, fast to type and there&amp;#8217;s a flow to the code which makes it quite easy to read.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Next     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Next I&amp;#8217;ll blog about downloading and building IronRuby and using it to call on .NET libraries, WPF and perhaps Silverlight (which seems to be all the buzz right now). I think I&amp;#8217;ll look at exceptions and error handling after that and see if I can get some time to look at Rails again.     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6115127" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Walkthroughs+_2600_amp_3B00_+Tutorials/default.aspx">Walkthroughs &amp;amp; Tutorials</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Ruby/default.aspx">Ruby</category></item><item><title>A .NET Guy Looking at Some Ruby</title><link>http://weblogs.asp.net/jdanforth/archive/2008/04/18/a-net-guy-looking-at-some-ruby.aspx</link><pubDate>Fri, 18 Apr 2008 14:58:58 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6110127</guid><dc:creator>jdanforth</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=6110127</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2008/04/18/a-net-guy-looking-at-some-ruby.aspx#comments</comments><description>&lt;p&gt;&lt;span lang="EN-US" style="font-weight: normal; font-size: 11pt; color: windowtext; line-height: 115%; font-family: " calibri?,?sans-serif?;="calibri?,?sans-serif?;" mso-ascii-theme-font:="mso-ascii-theme-font:" mso-fareast-font-family:="mso-fareast-font-family:" Calibri;="Calibri;" mso-fareast-theme-font:="mso-fareast-theme-font:" mso-hansi-theme-font:="mso-hansi-theme-font:" minor-latin;="minor-latin;" mso-bidi-font-family:="mso-bidi-font-family:" ?Times="?Times" New="New" Roman?;="Roman?;" mso-bidi-theme-font:="mso-bidi-theme-font:" minor-bidi;="minor-bidi;" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;I&amp;#8217;m thinking it would be nice to relearn the basics of Ruby (which seems to gain more and more popularity) and compare it to some of the dynamic features .NET 3.5 has been blessed with. I&amp;#8217;m also interested in where the Microsoft version of the language, IronRuby, is now and how I can use the .NET libraries from it. I installed and looked at Rails some (long) time ago now, but I never got the chance to use it and my minimal Ruby skills have now faded to nil again. So this is me taking it up again, hoping I can use it for something real, perhaps for unit testing or just test driving some .NET code with the help of IronRuby. &lt;/p&gt;  &lt;p&gt;What you&amp;#8217;re reading is just me scratching down notes as I go along, it&amp;#8217;s not an article or so, this is just for me to have something to get back to later on, so bear with me. I will probably write down things that are not right or make wrong assumptions, but I&amp;#8217;m happy to get comments if you see something awfully wrong. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I had to change the section on line continuation, because I was wrong about what I first wrote.&lt;/em&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Getting Started &lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;So how do I get started? First I need a Ruby implementation for the platform I&amp;#8217;m running on, in my case Windows Vista. On RubyForge there is a Windows installer for Ruby which contains everything you need to get going. It&amp;#8217;s available on &lt;a href="http://rubyforge.org/projects/rubyinstaller/"&gt;http://rubyforge.org/projects/rubyinstaller/&lt;/a&gt; and I&amp;#8217;m going for it. Later on I&amp;#8217;m also going to download and build IronRuby and .NET applications using the Ruby language, but you will still need Ruby installed to build IronRuby. The IronRuby website &lt;a href="http://www.ironruby.net"&gt;www.ironruby.net&lt;/a&gt; has some notes on all this, but I&amp;#8217;ll blog on that later I think. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The installer will give you the Ruby language, runtime and an editor called SciTE. It also includes a samples directory which may come in handy. With Ruby you got several options to create and test small console apps. After the installation completes, just open up a command prompt and type &amp;#8220;irb&amp;#8221; and you&amp;#8217;ll get an interactive Ruby command prompt, which is very handy for both testing and learning. Another option is to go to the Start menu and use &amp;#8220;fxri&amp;#8221;, which is a graphical interface to the Ruby documentation and also includes an interactive Ruby console. I&amp;#8217;ve used both today. Fxri is great when you&amp;#8217;re looking at someone else&amp;#8217;s Ruby code and you see a command or class you don&amp;#8217;t recognize. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The Ruby installer also comes with an electronic version of the book &amp;#8220;Programming Ruby - The Pragmatic Programmer's Guide&amp;#8221; by Dave Thomas &amp;#8211; which I can tell is also a great source for knowledge. I&amp;#8217;ve not read it yet, but I&amp;#8217;ve used it to look up certain things. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Tutorials      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Next I need some getting started articles or such, and there are tons of it on the Internet. You could use the book above, but I&amp;#8217;m looking for something which will get me into the dirt quickly. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;I found a &amp;#8220;Learning Ruby&amp;#8221; website by Daniel Carrera which looks promising, and I&amp;#8217;m using it to learn the very basics. You&amp;#8217;ll find it at &lt;/span&gt;&lt;a href="http://www.math.umd.edu/~dcarrera/ruby/0.3/index.html"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;http://www.math.umd.edu/~dcarrera/ruby/0.3/index.html&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: en-us"&gt; &lt;span lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;and it&amp;#8217;s using the &amp;#8220;irb&amp;#8221; console in its first steps, which works perfect with IronRuby. Just open up a command prompt and type: &lt;/span&gt;&lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" EN-US;="EN-US;" mso-bidi-font-weight:="mso-bidi-font-weight:" bold?="bold?"&gt;irb --simple-prompt &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;You'll be greeted with a prompt like this&amp;#8230; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&amp;#8230;and off you go. Just type your code and press enter. There are other great intros to Ruby on the Internet, and this one by Steve Litt looks good, &lt;/span&gt;&lt;a href="http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm&lt;/span&gt;&lt;/a&gt;&lt;span style="mso-ansi-language: en-us"&gt; &lt;span lang="EN-US"&gt;&lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Variables and Strings      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Most tutorials start with numbers, strings and variables. There&amp;#8217;s not much to say about Ruby variables &amp;#8211; you don&amp;#8217;t have to declare them, just initialize the variable with a value and start using it: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1      &lt;br style="mso-special-character: line-break" /&gt;      &lt;br style="mso-special-character: line-break" /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Exactly what I&amp;#8217;m expecting from a dynamic language, and strings are very easy to work with: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Johan&amp;quot;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot; Danforth&amp;quot;     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The string class in Ruby has a number of powerful methods you can use to work with, same as with the string class in .NET, but the Ruby string class has more than 100 methods on it (from counting the methods in fxri). The .NET string class has around 70 methods, but 45 of these are extension methods that are new to .NET 3.5, and I think many of them were inspired by dynamic languages just like Ruby. I have to say though that some of the methods in Ruby do the same things sort of and some methods are quite funny. Like squeeze, chomp, chop and such :) Methods for parsing, encoding, converting and such are also included in the Ruby string class, functionality that may be baked into other libraries in the .NET framework. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Running a Ruby Program File      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Running a Ruby program from a file is dead easy. From the console type &amp;#8220;ruby myprogram.rb&amp;#8221; and press enter. The installer also associates the .rb file extension with the Ruby executable, so it&amp;#8217;s possible to just type &amp;#8220;myprogram.rb&amp;#8221; or click the file from Windows Explorer. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;A good editor for your .rb programs seems to be SciTE which also comes with the Ruby installer. Just open up the editor, type the program and press F5 to run it (make sure you have saved it with the .rb file type). The results will be shown in the right pane of the SciTE editor. Nifty. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Type Conversion      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;What strikes me as odd is that Ruby is a dynamic language, but automatic type conversion is sometimes not as good as I would think, and something as simple as this will give you an error: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;sum&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;2     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;The sum is &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;sum&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-US" style="color: red; mso-ansi-language: en-us"&gt;test.rb:2:in `+': can't convert Fixnum into String (TypeError) &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;So, in a print statement like the above, Ruby won&amp;#8217;t convert the number variable into a string like c# or VB does: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;Dim&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; sum = 1 + 2      &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;Console.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;The sum is &amp;quot;&lt;/span&gt; &amp;amp; sum) &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;You&amp;#8217;ll have to convert the sum variable to a string like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;The sum is &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;su&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;m.to_s &lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Aesthetic Code      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Ruby seems to be much about the aesthetics of the code you write. Most Ruby tutorials seem to bring up naming of variables, classes and methods in an early state. What is funny is that the casing of a variable matters to the interpreter, because if you uppercase a variable, it&amp;#8217;s treated as a constant. You can change the value of a constant, but the runtime will give you a warning: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;PI&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;3.14     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;PI     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;PI&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;3.14159265     &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" ?Courier="?Courier" New?;="New?;"&gt;PI&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-US" style="color: red; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;test.rb:3: warning: already initialized constant PI      &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;3.14      &lt;br /&gt;3.14159265 &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;But what about code statements that are too long? In c# you can make a line break after almost any statement, &lt;em&gt;and it's the same thing in Ruby&lt;/em&gt;. I was wrong about this at first, because in Ruby (as in VB) you can put a backslash (underscore in VB) at the end of the line to do break up a line of code:&amp;#160; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;this is a &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;very &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; \&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; line-height: 115%; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;long statement&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Be careful not to put a space after the backslash, or you&amp;#8217;ll get a strange looking error: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="color: red; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;test2.rb:1: syntax error, unexpected $undefined      &lt;br /&gt;puts &amp;quot;this is a &amp;quot; + &amp;quot;very &amp;quot; + \       &lt;br /&gt;&lt;span style="mso-spacerun: yes"&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&gt;^ &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;I&amp;#8217;m not fond of the line continuation underscore thing in VB, and I&amp;#8217;m thinking the same of the backslash in Ruby, so you won't see me use it.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Loops      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Ruby seems to be good at this, and the most common syntax for-loops is easy to read and pretty nice: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;4.times&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;do&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;pass &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;b&gt;.&lt;/b&gt;to_s&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Well, this is just like any other for-loop out there, but the syntax is nicer. There are other ways to type the same thing in Ruby but I&amp;#8217;ll get back to that later. I know people have tried to come up with a similar syntax using .NET 3.5 method extension and lambda expressions, but I think it&amp;#8217;s hard to make it as compact as in Ruby. My 10 minute feeble attempt at making a c# version of the Ruby times-method would probably be an extension method like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &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: blue"&gt;void&lt;/span&gt; times(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; number, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt; codeblock)&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;&lt;span style="color: blue"&gt;while&lt;/span&gt; (number-- &amp;gt; 0)&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;codeblock();&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;And I could call it with a one-liner lambda expression like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; i = 1;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;4.times(() =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;hi! &amp;quot;&lt;/span&gt; + i++)); &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Or with a delegate (with some richer code inside) like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; i = 1;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;4.times(&lt;span style="color: blue"&gt;delegate&lt;/span&gt;(){&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;pass &amp;quot;&lt;/span&gt; + i);&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;i += 1;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;}); &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Not as nice as the Ruby variant, but close :) The System.Action Delegate class in .NET 3.5 is pretty awesome btw, and you got a generic version of it as well if you need to pass arguments on to the delegate. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Of course Ruby has the traditional VB-like &amp;#8220;for&amp;#8221; statement as well, with a couple of variations. A 1-5 for-loop looks like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;x&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;in&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1.&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;5&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;x&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;But a 1-4 for-loop looks like this, see the difference? &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;for&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;x&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;in&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1.&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;..&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;5&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;x&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;2 periods mean as long as the variable is less than or equal to the &amp;#8220;to&amp;#8221; value (inclusive), 3 periods mean as long as the variable is less than the &amp;#8220;to&amp;#8221; value (exclusive). I&amp;#8217;m sure this is a common coding mistake, as it&amp;#8217;s easy to miss. And as you can see, no braces/brackets like in c#, so I guess VB programmers feel a bit more comfortable with this syntax, but the for-loop statement in Ruby is, I believe, syntax sugar for this statement, which involves braces/brackets but equally valid: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;(&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1.&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;..&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;5&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;).&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;each&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;{|&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;b&gt;|&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Conditional Statements      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Conditional statements, in Ruby are a bit of a mix between VB and c#. Like in c#, &amp;#8220;=&amp;#8221; assigns values and &amp;#8220;==&amp;#8221; compares. I like that. For example: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;a&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;a&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;==&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;then&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;else&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Arrays and Lists      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Arrays in Ruby have much in common with the same in c# and VB.NET, especially with the new features in .NET 3.5. Ruby is zero based, so you address a specific item in the array with [] , and it&amp;#8217;s possible to initialize arrays in a similar way in all languages. In Ruby: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;numbers&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;zero&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;one&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;two&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]       &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;addresses&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;10&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Kings Rd&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;],&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;25&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Queens Rd&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Initializing a simple string array in c# 3.5 is quite similar: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;var&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; numbers = &lt;span style="color: blue"&gt;new&lt;/span&gt;[] { &lt;span style="color: #a31515"&gt;&amp;quot;zero&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;one&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;two&amp;quot;&lt;/span&gt; }; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The &amp;#8220;addresses&amp;#8221; array can be solved in many different ways in .NET, but I think the c# equivalent would be:&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&amp;#160; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;var&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; addresses = &lt;span style="color: blue"&gt;new&lt;/span&gt;[]       &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;new&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt;[] {10, &lt;span style="color: #a31515"&gt;&amp;quot;Kings Rd&amp;quot;&lt;/span&gt;},&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;object&lt;/span&gt;[] {25, &lt;span style="color: #a31515"&gt;&amp;quot;Queens Rd&amp;quot;&lt;/span&gt;}       &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;}; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;As you can see, c# requires a bit more typing. Personally I prefer to create an array of anonymous types in c#, as it is much easier to code against: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;var&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; addresses = &lt;span style="color: blue"&gt;new&lt;/span&gt;[] {&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;new&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;{ Number=10, Street=&lt;span style="color: #a31515"&gt;&amp;quot;Kings Rd&amp;quot;&lt;/span&gt; },&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;new&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;{ Number=25, Street=&lt;span style="color: #a31515"&gt;&amp;quot;Queens Rd&amp;quot;&lt;/span&gt; }       &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;}; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The VB.NET equivalent of a simple string array and array of anonymous types is something like this I think (I&amp;#8217;m not a VB-guy): &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;Dim&lt;/span&gt; numbers() = {&lt;span style="color: #a31515"&gt;&amp;quot;zero&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;one&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;two&amp;quot;&lt;/span&gt;}&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;Dim&lt;/span&gt; addresses() = {&lt;span style="color: blue"&gt;New&lt;/span&gt; &lt;span style="color: blue"&gt;With&lt;/span&gt; {.Number = 10, .Street = &lt;span style="color: #a31515"&gt;&amp;quot;Kings Rd&amp;quot;&lt;/span&gt;}, _&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&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;/span&gt;&lt;span style="color: blue"&gt;New&lt;/span&gt; &lt;span style="color: blue"&gt;With&lt;/span&gt; {.Number = 25, .Street = &lt;span style="color: #a31515"&gt;&amp;quot;Queens Rd&amp;quot;&lt;/span&gt;}} &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Oh, the number of things you can do with arrays in Ruby, and in a very intuitive way too. Reverse, sort, add, remove and other methods we recognize from -.NET List and List&amp;lt;&amp;gt; types, but like the Ruby string class there&amp;#8217;s a number of unusual but powerful methods on Ruby arrays like flatten (sample taken from the docs): &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;s&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;2&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;3&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&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&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #007f00; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" comic="comic" sans="sans" ms?;="ms?;" ?Comic="?Comic" Sans="sans" MS?;="ms?;"&gt;#=&amp;gt; [1, 2, 3]&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;t&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;4&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;5&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;6&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;7&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;8&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #007f00; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" comic="comic" sans="sans" ms?;="ms?;" ?Comic="?Comic" Sans="sans" MS?;="ms?;"&gt;#=&amp;gt; [4, 5, 6, [7, 8]]&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;a&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;s&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;t&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;9&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;10&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #007f00; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" comic="comic" sans="sans" ms?;="ms?;" ?Comic="?Comic" Sans="sans" MS?;="ms?;"&gt;#=&amp;gt; [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;a&lt;b&gt;.&lt;/b&gt;flatten&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&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; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #007f00; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" comic="comic" sans="sans" ms?;="ms?;" ?Comic="?Comic" Sans="sans" MS?;="ms?;"&gt;#=&amp;gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;If I coded Ruby for 10 years, I&amp;#8217;m not sure I would ever use that method :) It flattens an array of variable length arrays into a one-dimensional array recursively. Cool to have this method built into the Ruby language from scratch. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;But other than a few methods like this, it feels like you can do about the same things with the .NET lists and arrays. You may have to turn your array into a list or vice versa, so again we&amp;#8217;re talking a little bit of more code than Ruby, but not too much. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Iterators      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Related to arrays are of course iterators. A common way to iterate through a Ruby array is to use do &amp;#8211; end like some of the samples above. But there is a cool way to use a similar syntax, each &amp;#8211; do &amp;#8211; end &lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;and pass the current item of the array into a block of code. This seems to be a common style of coding in Ruby: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friends&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Melissa&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Jeff&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Ashley&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Rob&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]        &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friends&lt;b&gt;.&lt;/b&gt;each&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;do&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;|&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friend&lt;b&gt;|&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;I have a friend called &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friend&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;5.times&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;do&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;|&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;b&gt;|&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;pass &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;b&gt;.&lt;/b&gt;to_s&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;It&amp;#8217;s quite possible to use a similar style of coding in c#, by using a foreach loops, lambda expressions or delegates: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;var&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; friends = &lt;span style="color: blue"&gt;new&lt;/span&gt;[] {&lt;span style="color: #a31515"&gt;&amp;quot;Melissa&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;Jeff&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;Ashley&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;Rob&amp;quot;&lt;/span&gt;}; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;foreach&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;(&lt;span style="color: blue"&gt;var&lt;/span&gt; friend &lt;span style="color: blue"&gt;in&lt;/span&gt; friends)&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #2b91af; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Console&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;I have a friend called &amp;quot;&lt;/span&gt; + friend); &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;5.times(ii =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;pass &amp;quot;&lt;/span&gt; + ii)); &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;public&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; times(&lt;span style="color: blue"&gt;this&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; number, &lt;span style="color: #2b91af"&gt;Action&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt; block)       &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt; i = 0;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;while&lt;/span&gt; (i &amp;lt; number)&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;block(i);&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;i++;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}       &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;As you can see, I&amp;#8217;m using a method extension to create my own times() method, using a lambda expression to pass a block of code to the times() method with the help of the generic Action delegate. It&amp;#8217;s a variation of the times() method I used earlier. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Sometimes when the loop just contains one line of code some Ruby coders seem to replace the do &amp;#8211; end with curly braces like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;6.times&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;|&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;b&gt;|&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; line-height: 115%; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;pass &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;i&lt;b&gt;.&lt;/b&gt;to_s&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;As I mentioned earlier when I wrote about loops, this is just another way to type it. If the compiler turns the do-end into braces or vice versa I don&amp;#8217;t know &amp;#8211; it just works. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The &amp;#8220;each&amp;#8221; keyword in Ruby seems to be pretty powerful and lets you iterate through different sorts of lists in many ways. It is also used to handle hash-tables. A hash-table in Ruby is declared and initialized like this: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;fruits&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Apple&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;456&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Banana&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;789&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Orange&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;As you can see, we&amp;#8217;re using squiggly/curly braces/brackets instead of squares. Not sure why it is like this and I would have preferred to use squares here to as for arrays, but this apparently is the way&amp;#8230; To access a particular value, just address it with the key of course: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;fruits&lt;b&gt;[&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; line-height: 115%; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;And iterating through the table with the each &amp;#8211; do &amp;#8211; end syntax is starting to feel natural now: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;fruits&lt;b&gt;.&lt;/b&gt;each&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;do&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;|&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;key&lt;b&gt;,&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;value&lt;b&gt;|&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;puts&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;key&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot; =&amp;gt; &amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;+&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;value&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Of course you don&amp;#8217;t need to use the names &amp;#8220;key&amp;#8221; and &amp;#8220;value&amp;#8221;. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;It&amp;#8217;s quite similar to the way most other languages handle hash-tables. Hash-table declaration and initialization in c# is quite similar thanks to the new language features in c# 3.5: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;var&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt; h = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Hashtable&lt;/span&gt; {&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;span style="color: #a31515"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;Apple&amp;quot;&lt;/span&gt;},&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;span style="color: #a31515"&gt;&amp;quot;456&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;Banana&amp;quot;&lt;/span&gt;},&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: " mso-ansi-language:="mso-ansi-language:" courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?" en-us;="EN-US;"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;span style="color: #a31515"&gt;&amp;quot;789&amp;quot;&lt;/span&gt;,&lt;span style="color: #a31515"&gt;&amp;quot;Orange&amp;quot;&lt;/span&gt;}}; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Sorting Your Own Way      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;In c# lists and arrays there are ways to do your own custom sorting, but in Ruby it&amp;#8217;s done in a different way. You write your own sorting in-line in a sort &amp;#8211; do &amp;#8211; end loop like this for example: &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friends&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Johan&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Danforth&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;],&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Eric&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Quist&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;],        &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;[&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Bj&amp;#246;rn&amp;quot;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #7f007f; font-family: " mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" courier="courier" new?;="new?;"&gt;&amp;quot;Poppe&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friends&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;friends&lt;b&gt;.&lt;/b&gt;sort&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;do&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;|&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;a&lt;b&gt;,&lt;/b&gt;b&lt;b&gt;|&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;a&lt;b&gt;[&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&amp;lt;=&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;b&lt;b&gt;[&lt;/b&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #007f7f; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;1&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: black; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;]&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: gray; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 9pt; color: #007f00; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" comic="comic" sans="sans" ms?;="ms?;" ?Comic="?Comic" Sans="sans" MS?;="ms?;"&gt;# compare last names    &lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #00007f; line-height: 115%; font-family: " mso-bidi-font-family:="mso-bidi-font-family:" mso-ansi-language:="mso-ansi-language:" en-us?="EN-US?" verdana?,?sans-serif?;="verdana?,?sans-serif?;" Verdana;="Verdana;"&gt;end&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt; &lt;/span&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;Nice thing here is that is seems to be quite simple to do custom sorting of arrays with complex objects in them. The &amp;lt;=&amp;gt; operator is something which is built into Ruby because sorting and comparing is so often done. Basically a &amp;lt;=&amp;gt; b, &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;- returns -1 if a is less than b&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;- returns 0 if a is equal to b&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;- returns 1 if a is greater than b &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;The operator is able to work with strings and numbers. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;That&amp;#8217;s Enough for Now      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language: en-us"&gt;I think this is enough for now. I&amp;#8217;ll post a follow up about methods, classes, inheritance and such later on.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6110127" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Walkthroughs+_2600_amp_3B00_+Tutorials/default.aspx">Walkthroughs &amp;amp; Tutorials</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/Ruby/default.aspx">Ruby</category></item><item><title>ASP.NET MVC Framework (Part 1) - ScottGu's Blog</title><link>http://weblogs.asp.net/jdanforth/archive/2007/11/14/asp-net-mvc-framework-part-1-scottgu-s-blog.aspx</link><pubDate>Wed, 14 Nov 2007 13:56:54 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5168954</guid><dc:creator>jdanforth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jdanforth/rsscomments.aspx?PostID=5168954</wfw:commentRss><comments>http://weblogs.asp.net/jdanforth/archive/2007/11/14/asp-net-mvc-framework-part-1-scottgu-s-blog.aspx#comments</comments><description>&lt;p&gt;I think Scott Guthrie himself just did a better job than me to describe that basics of the ASP.NET MVC Framework on his blog :)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Since then I've been answering a lot of questions from people eager to learn more about it.&amp;#160; Given the level of interest I thought it might make sense to put together a few blog posts that describe how to use it in more detail.&amp;#160; This first post is one of several I'll be doing in the weeks ahead.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx"&gt;ASP.NET MVC Framework (Part 1) - ScottGu's Blog&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Go read it already, it got loads of nice pictures to help get an understanding of it all, including the folder structure which is used as a convention. Somewhat influenced by Ruby on Rails I would say ;)&lt;/p&gt;  &lt;p&gt;Considering what I've seen so far of MCV Framework, together with LINQ for SQL and the test framework it reminds me a lot of RoR, but perhaps not as much &amp;quot;convention over configuration&amp;quot; though. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5168954" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jdanforth/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://weblogs.asp.net/jdanforth/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item></channel></rss>