<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coding Day &#187; .Net</title>
	<atom:link href="http://www.codingday.com/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codingday.com</link>
	<description>Adventures in Computing, Can Erten's blog</description>
	<lastBuildDate>Tue, 13 Jul 2010 12:52:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Random number Generation with  RNG</title>
		<link>http://www.codingday.com/random-number-generation-with-rng/</link>
		<comments>http://www.codingday.com/random-number-generation-with-rng/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 10:38:56 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[F#]]></category>

		<guid isPermaLink="false">http://www.codingday.com/?p=474</guid>
		<description><![CDATA[I would like to mention a question that posed on stackoverflow a year back, with a slight change. Given a function which produces a random integer in the range 0 to 4, write a function which produces a random integer in the range 0 to 6. Simply, we have let ran5() = new Random().Next(5), we [...]]]></description>
			<content:encoded><![CDATA[<p>I would like to mention a question that <a target="_blank" href="http://stackoverflow.com/questions/137783/given-a-function-which-produces-a-random-integer-in-the-range-1-to-5-write-a-fun">posed on stackoverflow</a> a year back, with a slight change. </p>
<blockquote><p>Given a function which produces a random integer in the range 0 to 4, write a function which produces a random integer in the range 0 to 6.
</p></blockquote>
<p>Simply, we have let ran5() = new Random().Next(5), we would like to write ran7 using ran5, and without any other random number generator<br />
The answers are rather interesting for this question,  as it is important to have a uniformly distributed random number generator.<br />
The first attempt, is a naive way to generate the random number by defining the sample set small.</p>

<div class="wp_syntax"><div class="code"><pre class="fsharp" style="font-family:monospace;"><span style="color: #060; font-style: italic;">//random number generator with 6 numbers</span>
<span style="color: #06c; font-weight: bold;">let</span> ran <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">new</span> Random<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>
<span style="color: #06c; font-weight: bold;">let</span> random5<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> ran<span style="color: #000080;">.</span><span style="color: #505090;">Next</span><span style="color: #000080;">&#40;</span><span style="color: #c6c;">5</span><span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #060; font-style: italic;">//naive</span>
<span style="color: #06c; font-weight: bold;">let</span> rantbl <span style="color: #000080;">=</span> <span style="color: #000080;">&#91;</span><span style="color: #000080;">|</span> <span style="color: #c6c;">0</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">6</span> <span style="color: #000080;">|</span><span style="color: #000080;">&#93;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> <span style="color: #06c; font-weight: bold;">rec</span> random7<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">let</span> i,j <span style="color: #000080;">=</span> random5<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>, random5<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>                   
                    <span style="color: #06c; font-weight: bold;">let</span> sum <span style="color: #000080;">=</span> i <span style="color: #000080;">+</span> j
                    <span style="color: #06c; font-weight: bold;">if</span>  sum <span style="color: #000080;">&lt;</span> rantbl<span style="color: #000080;">.</span><span style="color: #505090;">Length</span> <span style="color: #06c; font-weight: bold;">then</span> rantbl<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span>sum<span style="color: #000080;">&#93;</span>
                    <span style="color: #06c; font-weight: bold;">else</span> random7<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span></pre></div></div>

<p>
Now, if you run the sample, it will generate the random numbers to 7 just fine, but it won&#8217;t be uniformly distributed, and will converge to a number as we run infinite times.<br />
However, if we define our initial set uniformly to match out number generator, in this case we can generate 5 numbers, so a set of 25, we can hit each element by the multiplication of those two  generators
</p>

<div class="wp_syntax"><div class="code"><pre class="fsharp" style="font-family:monospace;"><span style="color: #060; font-style: italic;">//based on</span>
<span style="color: #06c; font-weight: bold;">let</span> randomTable <span style="color: #000080;">=</span> <span style="color: #000080;">&#91;</span><span style="color: #000080;">|</span>for i <span style="color: #06c; font-weight: bold;">in</span> <span style="color: #c6c;">0</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">24</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: #06c; font-weight: bold;">if</span> i <span style="color: #000080;">/</span> <span style="color: #c6c;">7</span><span style="color: #000080;">&lt;</span><span style="color: #c6c;">3</span> <span style="color: #06c; font-weight: bold;">then</span> <span style="color: #06c; font-weight: bold;">yield</span> i <span style="color: #000080;">%</span> <span style="color: #c6c;">7</span>
                                        <span style="color: #06c; font-weight: bold;">else</span> <span style="color: #06c; font-weight: bold;">yield</span> <span style="color: #000080;">-</span><span style="color: #c6c;">1</span> <span style="color: #000080;">|</span><span style="color: #000080;">&#93;</span> 
<span style="color: #06c; font-weight: bold;">let</span> <span style="color: #06c; font-weight: bold;">rec</span> random7_2<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">let</span> i,j <span style="color: #000080;">=</span> random5<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>, random5<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>
                      <span style="color: #06c; font-weight: bold;">let</span> index <span style="color: #000080;">=</span> i  <span style="color: #000080;">*</span> <span style="color: #c6c;">5</span> <span style="color: #000080;">+</span> j
                      <span style="color: #06c; font-weight: bold;">if</span>  randomTable<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span>index<span style="color: #000080;">&#93;</span> <span style="color: #000080;">&lt;&gt;</span> <span style="color: #000080;">-</span><span style="color: #c6c;">1</span> <span style="color: #06c; font-weight: bold;">then</span> randomTable<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span>index<span style="color: #000080;">&#93;</span>
                      <span style="color: #06c; font-weight: bold;">else</span> random7_2<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> sampler sample <span style="color: #000080;">=</span> seq <span style="color: #000080;">&#123;</span> <span style="color: #06c; font-weight: bold;">for</span> i <span style="color: #06c; font-weight: bold;">in</span> <span style="color: #c6c;">0</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">100000</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: #06c; font-weight: bold;">yield</span> sample<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">&#125;</span></pre></div></div>

<div class="dos">val ran : Random<br />
val random5 : unit -> int<br />
val rantbl : int array<br />
val it : int array = [|0; 1; 2; 3; 4; 5; 6|]<br />
val randomTable : int array<br />
val it : int array = [|0; 1; 2; 3; 4; 5; 6; 0; 1; 2; 3; 4; 5; 6; 0; 1; 2; 3; 4; 5; 6; -1; -1; -1;<br />
-1|]<br />
val random7 : unit -> int<br />
val random7_2 : unit -> int<br />
val sampler : (unit -> &#8216;a) -> seq<'a></div>
<p>
We can estimate of the value of a random variable and predict the error, which is proportional to the iterations.  Since we have 2 sets, we can analyse and compare their statistical properties.
</p>

<div class="wp_syntax"><div class="code"><pre class="fsharp" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">let</span> variance sample N <span style="color: #000080;">=</span>  <span style="color: #06c; font-weight: bold;">let</span> mean <span style="color: #000080;">=</span> sample <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">average_by</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> i<span style="color: #000080;">-&gt;</span> float i<span style="color: #000080;">&#41;</span>
                         <span style="color: #000080;">&#40;</span>sample <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">sum_by</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> i<span style="color: #000080;">-&gt;</span><span style="color: #000080;">&#40;</span>float i <span style="color: #000080;">-</span> mean<span style="color: #000080;">&#41;</span> <span style="color: #000080;">*</span> <span style="color: #000080;">&#40;</span>float i <span style="color: #000080;">-</span> mean<span style="color: #000080;">&#41;</span> <span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span>
                                                     <span style="color: #000080;">/</span> N
<span style="color: #06c; font-weight: bold;">let</span> standardDeviation varian<span style="color: #000080;">=</span> sqrt <span style="color: #000080;">&#40;</span>varian<span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> standardError sample <span style="color: #000080;">=</span>  <span style="color: #06c; font-weight: bold;">let</span> N <span style="color: #000080;">=</span> float <span style="color: #000080;">&#40;</span>Seq<span style="color: #000080;">.</span><span style="color: #505090;">length</span> sample<span style="color: #000080;">&#41;</span>
                            <span style="color: #06c; font-weight: bold;">let</span> vari <span style="color: #000080;">=</span> variance sample N
                            <span style="color: #06c; font-weight: bold;">let</span> stDev <span style="color: #000080;">=</span> standardDeviation vari
                            stDev <span style="color: #000080;">/</span> <span style="color: #000080;">&#40;</span>sqrt N<span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> sample <span style="color: #000080;">=</span> sampler random7
standardError<span style="color: #000080;">&#40;</span>sampler random7 <span style="color: #000080;">&#41;</span>
standardError <span style="color: #000080;">&#40;</span>sampler random7_2<span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #060; font-style: italic;">// uniform distribution</span>
<span style="color: #06c; font-weight: bold;">let</span> errorSet mySet <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">let</span> N <span style="color: #000080;">=</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">length</span> mySet <span style="color: #000080;">|&gt;</span> float
                     mySet <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">count_by</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> e<span style="color: #000080;">-&gt;</span> e<span style="color: #000080;">&#41;</span>  <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">map</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> <span style="color: #000080;">&#40;</span>i,j<span style="color: #000080;">&#41;</span> <span style="color: #000080;">-&gt;</span> i, <span style="color: #000080;">&#40;</span>float j<span style="color: #000080;">&#41;</span><span style="color: #000080;">/</span>N <span style="color: #000080;">*</span> <span style="color: #c6c;">100.0</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">|&gt;</span> Map<span style="color: #000080;">.</span><span style="color: #505090;">of_seq</span>
&nbsp;
errorSet <span style="color: #000080;">&#40;</span>sampler random7<span style="color: #000080;">&#41;</span>
errorSet <span style="color: #000080;">&#40;</span>sampler random7_2<span style="color: #000080;">&#41;</span></pre></div></div>

<div class="dos">val variance : seq -> float -> float<br />
val standardDeviation : float -> float<br />
val standardError : seq -> float<br />
val sample : seq<br />
val errorSet : seq<'a> -> Map<'a,float></div>
<p><div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/random.fs'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/downloads.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/random.fs'>Random Number Generation</a>
							</h4><p>Downloads: 61  File Name: random.fs</p>
						</div>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/random-number-generation-with-rng/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Happy Pi Day and Monte Carlo Method</title>
		<link>http://www.codingday.com/happy-pi-day-and-monte-carlo-method/</link>
		<comments>http://www.codingday.com/happy-pi-day-and-monte-carlo-method/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 22:11:17 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[F#]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[monte carlo]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://www.codingday.com/?p=450</guid>
		<description><![CDATA[Pi Calculation Today is the day, 03/14 2010. Happy day to all! The Monte Carlo method generates multiple trials to determine the expected value of a random variable. Calculating Pi is generally the hello world of Monte Carlo Method in Stochastic Calculus. So for today, I will try to give a sample calculation of pi [...]]]></description>
			<content:encoded><![CDATA[<h3>Pi Calculation</h3>
<p>Today is the <img src="http://www.codingday.com/wp-content/plugins/easy-latex/cache/tex_0639f72af5c20093aca42231bd1e23de.png" title="\pi" style="vertical-align:-20%;" class="tex" alt="\pi" /> day, 03/14 2010. Happy <img src="http://www.codingday.com/wp-content/plugins/easy-latex/cache/tex_0639f72af5c20093aca42231bd1e23de.png" title="\pi" style="vertical-align:-20%;" class="tex" alt="\pi" />day to all!</p>
<blockquote><p>The Monte Carlo method generates multiple trials to determine the expected value of a  random variable.</p></blockquote>
<p>Calculating Pi is generally the hello world of Monte Carlo Method in Stochastic Calculus. So for today, I will try to give a sample calculation of pi as monte carlo in F#. There are very good articles on the <a href="http://en.wikipedia.org/wiki/Monte_Carlo_method" target="_blank">Monte carlo</a> and  how the <a href="http://www.chem.unl.edu/zeng/joy/mclab/mcintro.html" target="_blank">pi calculation</a> is formulated.</p>
<p>Generally these are the steps to follow, before running the simulation</p>
<ol>
<li>Define the input set</li>
<li>Generate randomly the input set</li>
<li>Filter the random set using some computations</li>
<li>Fold the result to the final result</li>
</ol>
<p>Pi calculation formula :<br />
<img src="http://www.codingday.com/wp-content/plugins/easy-latex/cache/tex_ee6406d66996d6b9daff084d4281c6d8.png" title="\frac{Hitting inside the circle} {Hitting Outside the circle} = \frac { 1/4  \pi r^2} { r^2} = \frac {1}{4}\pi" style="vertical-align:-20%;" class="tex" alt="\frac{Hitting inside the circle} {Hitting Outside the circle} = \frac { 1/4  \pi r^2} { r^2} = \frac {1}{4}\pi" /></p>

<div class="wp_syntax"><div class="code"><pre class="fsharp" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">open</span> System
<span style="color: #06c; font-weight: bold;">let</span> calcPi<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span>
    <span style="color: #06c; font-weight: bold;">let</span> ran <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">new</span> Random<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>
    <span style="color: #06c; font-weight: bold;">let</span> distances <span style="color: #000080;">=</span> seq <span style="color: #000080;">&#123;</span> <span style="color: #06c; font-weight: bold;">for</span> i <span style="color: #06c; font-weight: bold;">in</span> <span style="color: #c6c;">0</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">100000</span> <span style="color: #06c; font-weight: bold;">do</span>
                            <span style="color: #06c; font-weight: bold;">let</span> x,y  <span style="color: #000080;">=</span> ran<span style="color: #000080;">.</span><span style="color: #505090;">NextDouble</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>, ran<span style="color: #000080;">.</span><span style="color: #505090;">NextDouble</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>
                            <span style="color: #06c; font-weight: bold;">yield</span> sqrt <span style="color: #000080;">&#40;</span>x <span style="color: #000080;">*</span> x <span style="color: #000080;">+</span> y <span style="color: #000080;">*</span> y<span style="color: #000080;">&#41;</span>
         <span style="color: #000080;">&#125;</span>
&nbsp;
    <span style="color: #06c; font-weight: bold;">let</span> count <span style="color: #000080;">=</span> distances <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">filter</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> distance <span style="color: #000080;">-&gt;</span> distance <span style="color: #000080;">&lt;=</span> <span style="color: #c6c;">1.0</span><span style="color: #000080;">&#41;</span> 
                              <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">length</span>     
  <span style="color: #c6c;">4.0</span> <span style="color: #000080;">*</span> <span style="color: #000080;">&#40;</span>float count<span style="color: #000080;">&#41;</span> <span style="color: #000080;">/</span> <span style="color: #000080;">&#40;</span>float <span style="color: #000080;">&#40;</span>Seq<span style="color: #000080;">.</span><span style="color: #505090;">length</span> distances<span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> errorRate<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #000080;">&#40;</span><span style="color: #c6c;">1.0</span> <span style="color: #000080;">-</span> <span style="color: #000080;">&#40;</span>calcPi<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">/</span> Math<span style="color: #000080;">.</span><span style="color: #505090;">PI</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">*</span> <span style="color: #c6c;">100.0</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> print5 value <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">for</span> i <span style="color: #06c; font-weight: bold;">in</span> <span style="color: #c6c;">0</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">5</span> <span style="color: #06c; font-weight: bold;">do</span> printf <span style="color: #008080;">&quot;%f<span style="color: #008080; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000080;">&#40;</span>value<span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span>
print5 <span style="color: #000080;">&#40;</span>errorRate<span style="color: #000080;">&#41;</span></pre></div></div>

<div class="dos">val calcPi : unit -> float<br />
val errorRate : unit -> float<br />
val print5 : (unit -> float) -> unit<br />
Error rates:<br />
-0.024698<br />
-0.093453<br />
-0.013239<br />
-0.094726<br />
-0.373563<br />
0.308887<br />
></p>
</div>
<p><div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/pi.fs'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/downloads.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/pi.fs'>Pi Calculation</a>
							</h4><p>Downloads: 103  File Name: pi.fs</p>
						</div>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/happy-pi-day-and-monte-carlo-method/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Book Review &#8211; Real World Functional Programming</title>
		<link>http://www.codingday.com/book-review-real-world-functional-programming/</link>
		<comments>http://www.codingday.com/book-review-real-world-functional-programming/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 00:21:41 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://www.codingday.com/?p=421</guid>
		<description><![CDATA[Real-World functional programming has been written by Tomas Petricek and Jon Skeet. Tomasz’s and Jon&#8217;s book is built around how to think functionally when programming and how to make best use of functional paradigm for real world scenerios. The book is written  mainly for the C# programmers who would like to switch/learn more of the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.functional-programming.net/" target="_blank"><img class="alignleft size-medium wp-image-423" title="Real World Functional Programming" src="http://www.codingday.com/wp-content/uploads/2010/01/51JSoWuTsqL._SS500_-300x300.jpg" alt="Real World Functional Programming" width="300" height="300" /></a></p>
<p>Real-World functional programming has been written by <a href="http://tomasp.net/" target="_blank">Tomas Petricek</a> and <a href="http://msmvps.com/blogs/jon_skeet/" target="_blank">Jon Skeet</a>.<br />
Tomasz’s and Jon&#8217;s book is built around how to think functionally when programming and how to make best use of functional paradigm for real world scenerios. The book is written  mainly for the C# programmers who would like to switch/learn more of the functional world. It also features snippets with some technical background of the ideas involved.<br />
As the title suggests the book is not focussed on one language, instead a mix of C# and F#, and it does a great job in bringing these worlds together,which is to me best of both worlds. Although, samples are all in functional style, when the problem needs the functional beauty to express, F# takes place. This gives any .NET developer to see when to use the necessary language for a particular problem.</p>
<p>The book starts slowly with the functional structures, and goes to monads, and to reactive libraries.  I found the language of the book clear to understand, and easy to follow. The samples in the beginning of a chapter starts with some really simple constructs, but at the end of a chapter they become more complicated, and a nice programs to reflect the idea of the chapter.</p>
<p>Applied functional programming is probably the most sophisticated part of the book. Some ideas mainly inspired from research papers (cited at the end) blended with modern languages and libraries and applied somewhat differently. Especially composable functional libraries and reactive functional programs were insightful and open the mind with new possibilities.</p>
<p>Finally, I would recommend this book whoever wants to switch to functional programming and also learn new techniques in general. Each sample is crafted well, and represent real value with its tutorial writing style.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/book-review-real-world-functional-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pex, Unit Test but Better, Parameterized Unit Testing</title>
		<link>http://www.codingday.com/pex-unit-test-but-better-parameterized-unit-testing/</link>
		<comments>http://www.codingday.com/pex-unit-test-but-better-parameterized-unit-testing/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 23:39:24 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[parameterized]]></category>
		<category><![CDATA[pex]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://www.codingday.com/?p=431</guid>
		<description><![CDATA[Finally I had a chance to play with the Pex (Program EXploration) , I heard it on lang.net for the very first time and I was quite impressed, but it took a while to explore it. I downloaded the latest commercial evaluation package 0.22.50128.1 from Pex web site. It is about 12 MB, it comes [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-436" title="Pex" src="http://www.codingday.com/wp-content/uploads/2010/02/pexweb-150x121.png" alt="" width="150" height="121" /></p>
<p>Finally I had a chance to play with the Pex (Program EXploration) , I heard it on <a href="http://langnetsymposium.com/2008/talks/2-08%20-%20Pex%20-%20Peli%20de%20Halleux.html" target="_blank">lang.net</a> for the very first time and I was quite impressed, but it took a while to explore it.</p>
<p>I downloaded the latest commercial evaluation package 0.22.50128.1 from <a href="http://research.microsoft.com/en-us/projects/Pex/" target="_blank">Pex web site</a>.</p>
<p>It is about 12 MB, it comes with different installation options with the support of VS 2008 and 2010. It installed without any problems on my VS2010 beta 2.</p>
<p>Here is what you get from the installation :</p>
<ul>
<li>Pex command line (Visual Studio not required)</li>
<li>Pex Visual Studio Add-in, for Visual Studio 2008 and Visual Studio 2010 Beta2</li>
<li>Moles (which includes Stubs), lightweight test stubs and detours for .NET</li>
<li>API reference, tutorials and documentation</li>
<li>Samples</li>
</ul>
<p>The documentation is really detailed, and the samples are worth investigating. I quite liked the <a href="http://research.microsoft.com/en-us/projects/pex/pextutorial.pdf">Pex Tutorial</a> document, which explains in detail what Pex is all about.</p>
<p>The good thing is it supports many different testing frameworks, including .NET&#8217;s own, nunit, xunit etc. By the way, I have to say VS2010 is awesome!</p>
<p>Pex is pretty much like a unit test but better in many ways. I&#8217;m quite surprised by the dynamic coverage window of a test method that you execute. This way, it is clear to see if the code is fully covered by the Pex test.</p>
<p>Pex is more like test method that takes inputs. In general, unit tests are not taking any inputs, they are isolated from each other and from external access, other than calling them parameterless.</p>
<p>Input generation in Pex based on the static analysis of the methods. It generates inputs such that, the code will be covered in full, however for some special types, the inputs might need to be explicitely told to test framework.  The tools it brings to Visual Studio is extremely simple and easy to use. It does a very good job on incorporating those results.</p>
<p>Here is a very simple function that I generated my first Pex tests from</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"> <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">int</span> Compare<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i, <span style="color: #FF0000;">string</span> s<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>i <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">500</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                i <span style="color: #008000;">*=</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> Compare2<span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">return</span> i <span style="color: #008000;">*</span> i<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span></pre></div></div>

<p><a href="http://www.codingday.com/wp-content/uploads/2010/02/Screen-shot-2010-02-07-at-23.22.53.png"><img title="Run Pex Window" src="http://www.codingday.com/wp-content/uploads/2010/02/Screen-shot-2010-02-07-at-23.22.53.png" alt="" width="581" height="176" /></a></p>
<p>When you run Pex, it generates potential inputs to cover all the code. According to the documentation, it uses static analysis to figure the potential values. So it is not a random number generated test, or a brute force test, which is quite interesting. Pex can cover some obscure side of the code, which fully supports many Unicode string inputs or regular expressions.</p>
<p>However, when I converted this very simple code, from System.Int32 to System.Numeric.<em>BigInteger</em> (a new type in .NET 4), the test only generated for a null value. Unless I&#8217;m missing something, it doesn&#8217;t support all the types as yet, but it looks like a promising and valuable product to be added to your toolset</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/pex-unit-test-but-better-parameterized-unit-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Poker : Programming Problem</title>
		<link>http://www.codingday.com/poker-programming-problem/</link>
		<comments>http://www.codingday.com/poker-programming-problem/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 01:19:36 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[F#]]></category>
		<category><![CDATA[54]]></category>
		<category><![CDATA[euler]]></category>
		<category><![CDATA[fsharp]]></category>
		<category><![CDATA[poker]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[projecteuler]]></category>

		<guid isPermaLink="false">http://www.canerten.com/?p=333</guid>
		<description><![CDATA[Although it has been a while since Brian posted the poker problem in his blog, I haven&#8217;t got the chance to look at it until I came across in ProjectEuler Problem 54. It is not the elegant or best solution at all, but just wanted to join the crew and can confirm it works with [...]]]></description>
			<content:encoded><![CDATA[<p>Although it has been a while since Brian posted the <a title="A programming problem," href="http://lorgonblog.spaces.live.com/Blog/cns!701679AD17B6D310!546.entry" target="_blank">poker problem</a> in his blog, I haven&#8217;t got the chance to look at it until I came across in ProjectEuler <a href="http://projecteuler.net/index.php?section=problems&amp;id=54" target="_blank">Problem 54</a>. It is not the elegant or best solution at all, but just wanted to join the crew and can confirm it works with the problem&#8217;s 1000 games&#8217; dataset.</p>
<p>Hope this helps.</p>

<div class="wp_syntax"><div class="code"><pre class="fsharp" style="font-family:monospace;"><span style="color: #066; font-weight: bold;">#light</span>
<span style="color: #060; font-style: italic;">(* Problem 54 *)</span>
<span style="color: #06c; font-weight: bold;">type</span> suit <span style="color: #000080;">=</span> <span style="color: #000080;">|</span>Spades <span style="color: #000080;">|</span>Hearts <span style="color: #000080;">|</span>Clubs <span style="color: #000080;">|</span>Diamonds 
<span style="color: #06c; font-weight: bold;">type</span> card<span style="color: #000080;">=</span>  <span style="color: #000080;">|</span>Ace <span style="color: #000080;">=</span> <span style="color: #c6c;">14</span> <span style="color: #000080;">|</span>Two <span style="color: #000080;">=</span> <span style="color: #c6c;">2</span>  <span style="color: #000080;">|</span>Three <span style="color: #000080;">=</span><span style="color: #c6c;">3</span>  <span style="color: #000080;">|</span>Four <span style="color: #000080;">=</span> <span style="color: #c6c;">4</span> <span style="color: #000080;">|</span>Five <span style="color: #000080;">=</span> <span style="color: #c6c;">5</span> <span style="color: #000080;">|</span>Six <span style="color: #000080;">=</span> <span style="color: #c6c;">6</span> 
            <span style="color: #000080;">|</span>Seven <span style="color: #000080;">=</span><span style="color: #c6c;">7</span>  <span style="color: #000080;">|</span>Eight <span style="color: #000080;">=</span> <span style="color: #c6c;">8</span> <span style="color: #000080;">|</span>Nine <span style="color: #000080;">=</span> <span style="color: #c6c;">9</span> <span style="color: #000080;">|</span>Ten <span style="color: #000080;">=</span> <span style="color: #c6c;">10</span> <span style="color: #000080;">|</span>Jack <span style="color: #000080;">=</span> <span style="color: #c6c;">11</span> <span style="color: #000080;">|</span>Queen <span style="color: #000080;">=</span><span style="color: #c6c;">12</span> <span style="color: #000080;">|</span>King  <span style="color: #000080;">=</span><span style="color: #c6c;">13</span>
<span style="color: #06c; font-weight: bold;">type</span> acard <span style="color: #000080;">=</span> <span style="color: #000080;">&#40;</span>card <span style="color: #000080;">*</span> suit<span style="color: #000080;">&#41;</span>  
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> carder x<span style="color: #000080;">:</span>card<span style="color: #000080;">=</span> enum x
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> card_value <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">function</span>
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>A<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> card<span style="color: #000080;">.</span><span style="color: #505090;">Ace</span>
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>K<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> card<span style="color: #000080;">.</span><span style="color: #505090;">King</span>
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>Q<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> card<span style="color: #000080;">.</span><span style="color: #505090;">Queen</span>
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>J<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> card<span style="color: #000080;">.</span><span style="color: #505090;">Jack</span>  
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>T<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> card<span style="color: #000080;">.</span><span style="color: #505090;">Ten</span>
    <span style="color: #000080;">|</span> c <span style="color: #000080;">-&gt;</span>  carder<span style="color: #000080;">&#40;</span>System<span style="color: #000080;">.</span><span style="color: #505090;">Int32</span><span style="color: #000080;">.</span><span style="color: #505090;">Parse</span><span style="color: #000080;">&#40;</span>c<span style="color: #000080;">.</span><span style="color: #505090;">ToString</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> suit_value <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">function</span>
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>S<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> Spades
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>H<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> Hearts    
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>C<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> Clubs
    <span style="color: #000080;">|</span> <span style="color: #000080;">'</span>D<span style="color: #000080;">'</span> <span style="color: #000080;">-&gt;</span> Diamonds    
    <span style="color: #000080;">|</span> a <span style="color: #000080;">-&gt;</span> invalid_arg <span style="color: #000080;">&#40;</span>a<span style="color: #000080;">.</span><span style="color: #505090;">ToString</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> Create <span style="color: #000080;">&#40;</span>str<span style="color: #000080;">:</span> string<span style="color: #000080;">&#41;</span> <span style="color: #000080;">:</span>acard <span style="color: #000080;">=</span> <span style="color: #000080;">&#40;</span>card_value str<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span><span style="color: #c6c;">0</span><span style="color: #000080;">&#93;</span>,suit_value str<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span><span style="color: #c6c;">1</span><span style="color: #000080;">&#93;</span><span style="color: #000080;">&#41;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> isstraigh <span style="color: #000080;">&#40;</span>mycards<span style="color: #000080;">:</span>acard list<span style="color: #000080;">&#41;</span>  <span style="color: #000080;">=</span> 
    <span style="color: #06c; font-weight: bold;">let</span> mycards <span style="color: #000080;">=</span> List<span style="color: #000080;">.</span><span style="color: #505090;">sort_by</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> <span style="color: #000080;">&#40;</span>a,b<span style="color: #000080;">&#41;</span> <span style="color: #000080;">-&gt;</span> a,b<span style="color: #000080;">&#41;</span> mycards
    <span style="color: #06c; font-weight: bold;">let</span> <span style="color: #06c; font-weight: bold;">rec</span> isstr previouscard mycards   <span style="color: #000080;">&#40;</span>straightlist <span style="color: #000080;">:</span> acard list<span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span>
        <span style="color: #06c; font-weight: bold;">if</span> straightlist<span style="color: #000080;">.</span><span style="color: #505090;">Length</span> <span style="color: #000080;">&gt;=</span> <span style="color: #c6c;">5</span> <span style="color: #06c; font-weight: bold;">then</span> straightlist
        <span style="color: #06c; font-weight: bold;">else</span> <span style="color: #06c; font-weight: bold;">match</span> mycards <span style="color: #06c; font-weight: bold;">with</span>  
                <span style="color: #000080;">|</span> cur <span style="color: #000080;">::</span> rest <span style="color: #000080;">-&gt;</span> <span style="color: #06c; font-weight: bold;">if</span> int <span style="color: #000080;">&#40;</span>fst cur<span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> int <span style="color: #000080;">&#40;</span><span style="color: #000080;">&#40;</span>fst previouscard<span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">+</span> <span style="color: #c6c;">1</span> <span style="color: #06c; font-weight: bold;">then</span> isstr cur rest  <span style="color: #000080;">&#40;</span>cur<span style="color: #000080;">::</span>straightlist<span style="color: #000080;">&#41;</span>
                                 <span style="color: #06c; font-weight: bold;">else</span> isstr cur rest  <span style="color: #000080;">&#91;</span><span style="color: #000080;">&#93;</span>                           
                <span style="color: #000080;">|</span> <span style="color: #06c; font-weight: bold;">_</span> <span style="color: #000080;">-&gt;</span> <span style="color: #000080;">&#91;</span><span style="color: #000080;">&#93;</span>
    <span style="color: #06c; font-weight: bold;">let</span> head <span style="color: #000080;">=</span> List<span style="color: #000080;">.</span><span style="color: #505090;">hd</span> mycards
    isstr head <span style="color: #000080;">&#40;</span>List<span style="color: #000080;">.</span><span style="color: #505090;">tl</span> mycards<span style="color: #000080;">&#41;</span> <span style="color: #000080;">&#91;</span>head<span style="color: #000080;">&#93;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> pairl <span style="color: #000080;">&#40;</span>mycards <span style="color: #000080;">:</span> acard list<span style="color: #000080;">&#41;</span> groupfunction minelementCount <span style="color: #000080;">=</span>
                 mycards <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">group_by</span> groupfunction
                         <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">filter</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> a <span style="color: #000080;">-&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">length</span> <span style="color: #000080;">&#40;</span>snd a<span style="color: #000080;">&#41;</span> <span style="color: #000080;">&gt;=</span> minelementCount<span style="color: #000080;">&#41;</span>
                         <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">to_list</span>
                         <span style="color: #000080;">|&gt;</span> List<span style="color: #000080;">.</span><span style="color: #505090;">unzip</span>
&nbsp;
&nbsp;
<span style="color: #06c; font-weight: bold;">type</span> Ranks <span style="color: #000080;">=</span>
    <span style="color: #000080;">|</span> Highest <span style="color: #06c; font-weight: bold;">of</span> card
    <span style="color: #000080;">|</span> Pair <span style="color: #06c; font-weight: bold;">of</span>  card
    <span style="color: #000080;">|</span> TwoPair <span style="color: #06c; font-weight: bold;">of</span> card<span style="color: #000080;">*</span>card
    <span style="color: #000080;">|</span> Three <span style="color: #06c; font-weight: bold;">of</span> card
    <span style="color: #000080;">|</span> Straight <span style="color: #06c; font-weight: bold;">of</span> card
    <span style="color: #000080;">|</span> Flush <span style="color: #06c; font-weight: bold;">of</span> card 
    <span style="color: #000080;">|</span> FullHouse <span style="color: #06c; font-weight: bold;">of</span>  card<span style="color: #000080;">*</span>card
    <span style="color: #000080;">|</span> Four <span style="color: #06c; font-weight: bold;">of</span>  card
    <span style="color: #000080;">|</span> StraightFlush <span style="color: #06c; font-weight: bold;">of</span> card
&nbsp;
<span style="color: #06c; font-weight: bold;">type</span> Player <span style="color: #000080;">=</span> <span style="color: #000080;">|</span>One <span style="color: #000080;">|</span>Two  <span style="color: #000080;">|</span>Noone
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> rank <span style="color: #000080;">&#40;</span>mycards <span style="color: #000080;">:</span>  acard list<span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span>     
    <span style="color: #06c; font-weight: bold;">let</span> traverseL  <span style="color: #000080;">&#40;</span>l <span style="color: #000080;">:'</span>a list<span style="color: #000080;">&#41;</span>  <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">if</span> not l<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> l  <span style="color: #000080;">|&gt;</span> List<span style="color: #000080;">.</span><span style="color: #505090;">hd</span> <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">to_list</span>
                                   <span style="color: #06c; font-weight: bold;">else</span> <span style="color: #000080;">&#91;</span><span style="color: #000080;">&#93;</span>                            
    <span style="color: #06c; font-weight: bold;">let</span> isflush mycards <span style="color: #000080;">=</span> snd <span style="color: #000080;">&#40;</span>pairl mycards snd <span style="color: #c6c;">5</span><span style="color: #000080;">&#41;</span>  <span style="color: #000080;">|&gt;</span> traverseL
&nbsp;
    <span style="color: #06c; font-weight: bold;">let</span> FofF l <span style="color: #000080;">=</span> traverseL l <span style="color: #000080;">|&gt;</span> List<span style="color: #000080;">.</span><span style="color: #505090;">hd</span> <span style="color: #000080;">|&gt;</span> fst
&nbsp;
    <span style="color: #06c; font-weight: bold;">let</span> flush <span style="color: #000080;">=</span> isflush mycards
    <span style="color: #06c; font-weight: bold;">let</span> straight <span style="color: #000080;">=</span> isstraigh mycards
&nbsp;
    <span style="color: #06c; font-weight: bold;">let</span> ispair count<span style="color: #000080;">=</span> pairl mycards fst count                                                             
&nbsp;
    <span style="color: #06c; font-weight: bold;">let</span> four,fours <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">let</span> f,s <span style="color: #000080;">=</span> ispair <span style="color: #c6c;">4</span> 
                     f,s<span style="color: #000080;">|&gt;</span> traverseL
    <span style="color: #06c; font-weight: bold;">let</span> three,threes <span style="color: #000080;">=</span> ispair <span style="color: #c6c;">3</span> 
    <span style="color: #06c; font-weight: bold;">let</span> two,twos <span style="color: #000080;">=</span> ispair <span style="color: #c6c;">2</span>
&nbsp;
    <span style="color: #06c; font-weight: bold;">let</span> maxcard c <span style="color: #000080;">=</span> fst <span style="color: #000080;">&#40;</span>List<span style="color: #000080;">.</span><span style="color: #505090;">max</span> c<span style="color: #000080;">&#41;</span>
&nbsp;
    <span style="color: #06c; font-weight: bold;">if</span> not flush<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #000080;">&amp;&amp;</span> not straight<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> StraightFlush<span style="color: #000080;">&#40;</span>maxcard flush<span style="color: #000080;">&#41;</span>,flush
    <span style="color: #06c; font-weight: bold;">elif</span>  not fours<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> Four<span style="color: #000080;">&#40;</span>four<span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span>,fours
    <span style="color: #06c; font-weight: bold;">elif</span> not threes<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #000080;">&amp;&amp;</span> not twos<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #000080;">&amp;&amp;</span> FofF twos <span style="color: #000080;">&lt;&gt;</span> FofF threes <span style="color: #06c; font-weight: bold;">then</span> FullHouse<span style="color: #000080;">&#40;</span>two<span style="color: #000080;">.</span><span style="color: #505090;">Head</span>, three<span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span>, List<span style="color: #000080;">.</span><span style="color: #505090;">append</span> <span style="color: #000080;">&#40;</span>threes <span style="color: #000080;">|&gt;</span> traverseL<span style="color: #000080;">&#41;</span> <span style="color: #000080;">&#40;</span>traverseL twos<span style="color: #000080;">&#41;</span>
    <span style="color: #06c; font-weight: bold;">elif</span> not flush<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> Flush<span style="color: #000080;">&#40;</span>maxcard flush<span style="color: #000080;">&#41;</span>,flush
    <span style="color: #06c; font-weight: bold;">elif</span> not straight<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> Straight<span style="color: #000080;">&#40;</span>maxcard straight<span style="color: #000080;">&#41;</span>,straight
    <span style="color: #06c; font-weight: bold;">elif</span> not three<span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> Three<span style="color: #000080;">&#40;</span> three<span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span>, threes <span style="color: #000080;">|&gt;</span> traverseL
    <span style="color: #06c; font-weight: bold;">elif</span> List<span style="color: #000080;">.</span><span style="color: #505090;">length</span> two <span style="color: #000080;">=</span> <span style="color: #c6c;">2</span> <span style="color: #06c; font-weight: bold;">then</span> TwoPair<span style="color: #000080;">&#40;</span>two<span style="color: #000080;">.</span><span style="color: #505090;">Head</span>,two<span style="color: #000080;">.</span><span style="color: #505090;">Tail</span><span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span>,Seq<span style="color: #000080;">.</span><span style="color: #505090;">append</span> <span style="color: #000080;">&#40;</span>twos<span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">&#40;</span>twos<span style="color: #000080;">.</span><span style="color: #505090;">Tail</span><span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">|&gt;</span> Seq<span style="color: #000080;">.</span><span style="color: #505090;">to_list</span>
    <span style="color: #06c; font-weight: bold;">elif</span> not <span style="color: #000080;">&#40;</span>twos <span style="color: #000080;">|&gt;</span> traverseL<span style="color: #000080;">&#41;</span><span style="color: #000080;">.</span><span style="color: #505090;">IsEmpty</span> <span style="color: #06c; font-weight: bold;">then</span> Pair<span style="color: #000080;">&#40;</span>two<span style="color: #000080;">.</span><span style="color: #505090;">Head</span><span style="color: #000080;">&#41;</span>, twos <span style="color: #000080;">|&gt;</span> traverseL
    <span style="color: #06c; font-weight: bold;">else</span> Highest<span style="color: #000080;">&#40;</span>maxcard mycards<span style="color: #000080;">&#41;</span>, <span style="color: #000080;">&#91;</span>List<span style="color: #000080;">.</span><span style="color: #505090;">max</span> mycards<span style="color: #000080;">&#93;</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> play input <span style="color: #000080;">=</span>
    <span style="color: #06c; font-weight: bold;">let</span> convert <span style="color: #000080;">&#40;</span>line<span style="color: #000080;">:</span> string<span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> <span style="color: #06c; font-weight: bold;">let</span> l <span style="color: #000080;">=</span> line<span style="color: #000080;">.</span><span style="color: #505090;">Split</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#91;</span><span style="color: #000080;">|'</span> <span style="color: #000080;">'|</span><span style="color: #000080;">&#93;</span><span style="color: #000080;">&#41;</span>                                  
                                 <span style="color: #000080;">&#91;</span><span style="color: #000080;">|</span><span style="color: #000080;">&#91;</span><span style="color: #06c; font-weight: bold;">for</span> j <span style="color: #06c; font-weight: bold;">in</span> <span style="color: #c6c;">0</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">4</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: #06c; font-weight: bold;">yield</span> Create<span style="color: #000080;">&#40;</span> l<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span>j<span style="color: #000080;">&#93;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#93;</span><span style="color: #000080;">;</span> <span style="color: #000080;">&#91;</span><span style="color: #06c; font-weight: bold;">for</span> j <span style="color: #06c; font-weight: bold;">in</span> <span style="color: #c6c;">5</span> <span style="color: #000080;">..</span> <span style="color: #c6c;">9</span> <span style="color: #06c; font-weight: bold;">do</span> <span style="color: #06c; font-weight: bold;">yield</span> Create<span style="color: #000080;">&#40;</span> l<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span>j<span style="color: #000080;">&#93;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#93;</span><span style="color: #000080;">|</span><span style="color: #000080;">&#93;</span>                                                                  
    <span style="color: #06c; font-weight: bold;">let</span> playercrds <span style="color: #000080;">=</span> convert input              
    <span style="color: #06c; font-weight: bold;">let</span> <span style="color: #06c; font-weight: bold;">rec</span> iswinner pcards<span style="color: #000080;">=</span>               
                <span style="color: #06c; font-weight: bold;">let</span> ranks,rankcards <span style="color: #000080;">=</span> pcards <span style="color: #000080;">|&gt;</span> Array<span style="color: #000080;">.</span><span style="color: #505090;">map</span> <span style="color: #000080;">&#40;</span>rank<span style="color: #000080;">&#41;</span>  <span style="color: #000080;">|&gt;</span> Array<span style="color: #000080;">.</span><span style="color: #505090;">unzip</span>
&nbsp;
                <span style="color: #06c; font-weight: bold;">let</span> removecards <span style="color: #000080;">&#40;</span>mainlist<span style="color: #000080;">&#41;</span> <span style="color: #000080;">&#40;</span>toberemoved<span style="color: #000080;">&#41;</span>  <span style="color: #000080;">=</span>                         
                        mainlist <span style="color: #000080;">|&gt;</span> Array<span style="color: #000080;">.</span><span style="color: #505090;">map2</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> rem main<span style="color: #000080;">-&gt;</span> main <span style="color: #000080;">|&gt;</span> List<span style="color: #000080;">.</span><span style="color: #505090;">filter</span> <span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> c<span style="color: #000080;">-&gt;</span>
                                List<span style="color: #000080;">.</span><span style="color: #505090;">fold_left</span><span style="color: #000080;">&#40;</span><span style="color: #06c; font-weight: bold;">fun</span> ac x<span style="color: #000080;">-&gt;</span> <span style="color: #06c; font-weight: bold;">if</span> x <span style="color: #000080;">=</span> c <span style="color: #06c; font-weight: bold;">then</span> ac <span style="color: #000080;">&amp;&amp;</span> <span style="color: #06c; font-weight: bold;">false</span> <span style="color: #06c; font-weight: bold;">else</span> ac <span style="color: #000080;">&amp;&amp;</span> <span style="color: #06c; font-weight: bold;">true</span><span style="color: #000080;">&#41;</span> <span style="color: #06c; font-weight: bold;">true</span> rem<span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span> toberemoved
&nbsp;
                <span style="color: #06c; font-weight: bold;">if</span> ranks<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span><span style="color: #c6c;">0</span><span style="color: #000080;">&#93;</span><span style="color: #000080;">&gt;</span>ranks<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span><span style="color: #c6c;">1</span><span style="color: #000080;">&#93;</span> <span style="color: #06c; font-weight: bold;">then</span> One
                <span style="color: #06c; font-weight: bold;">elif</span> ranks<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span><span style="color: #c6c;">0</span><span style="color: #000080;">&#93;</span><span style="color: #000080;">&lt;</span>ranks<span style="color: #000080;">.</span><span style="color: #000080;">&#91;</span><span style="color: #c6c;">1</span><span style="color: #000080;">&#93;</span> <span style="color: #06c; font-weight: bold;">then</span> Two
                <span style="color: #06c; font-weight: bold;">else</span> iswinner  <span style="color: #000080;">&#40;</span>removecards  pcards rankcards<span style="color: #000080;">&#41;</span> 
&nbsp;
    iswinner playercrds
&nbsp;
&nbsp;
play  <span style="color: #008080;">&quot;5H 5C 6S 7S KD 2C 3S 8S 8D TD&quot;</span> 
play  <span style="color: #008080;">&quot;5D 8C 9S JS AC 2C 5C 7D 8S QH&quot;</span>
play  <span style="color: #008080;">&quot;2D 9C AS AH AC 3D 6D 7D TD QD&quot;</span>
play  <span style="color: #008080;">&quot;4D 6S 9H QH QC 3D 6D 7H QD QS&quot;</span>  <span style="color: #060; font-style: italic;">// prob pair queens look at the highes</span>
play  <span style="color: #008080;">&quot;2H 2D 4C 4D 4S 3C 3D 3S 9S 9D&quot;</span> 
&nbsp;
play  <span style="color: #008080;">&quot;2H 2D 4C 4D 4S 2H 2D 4C 4D 4S&quot;</span> 
&nbsp;
play  <span style="color: #008080;">&quot;TH 8D 6C 4D 3S TH 8D 6C 4D 4S&quot;</span> 
&nbsp;
&nbsp;
&nbsp;
<span style="color: #06c; font-weight: bold;">let</span> rdinput <span style="color: #000080;">=</span>   <span style="color: #06c; font-weight: bold;">use</span> file <span style="color: #000080;">=</span> System<span style="color: #000080;">.</span><span style="color: #505090;">IO</span><span style="color: #000080;">.</span><span style="color: #505090;">File</span><span style="color: #000080;">.</span><span style="color: #505090;">OpenText</span><span style="color: #000080;">&#40;</span><span style="color: #008080;">&quot;poker.txt&quot;</span><span style="color: #000080;">&#41;</span>
                <span style="color: #06c; font-weight: bold;">let</span> p1count <span style="color: #000080;">=</span> ref <span style="color: #c6c;">0</span>  
&nbsp;
                <span style="color: #06c; font-weight: bold;">while</span> not file<span style="color: #000080;">.</span><span style="color: #505090;">EndOfStream</span> <span style="color: #06c; font-weight: bold;">do</span>
                 <span style="color: #06c; font-weight: bold;">if</span> play <span style="color: #000080;">&#40;</span>file<span style="color: #000080;">.</span><span style="color: #505090;">ReadLine</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span><span style="color: #000080;">&#41;</span> <span style="color: #000080;">=</span> One <span style="color: #06c; font-weight: bold;">then</span> p1count <span style="color: #000080;">:=</span> <span style="color: #000080;">!</span>p1count<span style="color: #000080;">+</span><span style="color: #c6c;">1</span>
&nbsp;
                file<span style="color: #000080;">.</span><span style="color: #505090;">Close</span><span style="color: #000080;">&#40;</span><span style="color: #000080;">&#41;</span>
                <span style="color: #000080;">!</span>p1count</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/poker-programming-problem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Multiple Inheritance in C# using Dynamic Features</title>
		<link>http://www.codingday.com/multiple-inheritance-in-c-using-dynamic-features/</link>
		<comments>http://www.codingday.com/multiple-inheritance-in-c-using-dynamic-features/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 16:03:30 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[functional]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[multiple inheritance]]></category>

		<guid isPermaLink="false">http://www.canerten.com/?p=346</guid>
		<description><![CDATA[Multiple Inheritance is a feature that a class that can inherit more than one class. Although CLR does not really care about it, it is not possible in the mainstream .NET languages to have multiple inheritance. It is arguable that why we would ever need multiple inheritance. I think it is the same paradox as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Multiple_inheritance">Multiple Inheritance</a> is a feature that a class  that can inherit more than one class. Although CLR does not really care about it, it is not possible in the mainstream .NET languages to have multiple inheritance. </p>
<p>It is arguable that why we would ever need multiple inheritance. I think it is the same paradox as having dynamic types in a statically typed language. I am not going into that debate as it is already decided for almost a decade. This is an attempt on how to achieve the same effect using dynamic types easily.</p>
<p>In C++, multiple inheritance can simply be expressed like this :</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">class</span> Auto <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
  <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> Go<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">virtual</span> ~Auto<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">class</span> Animal <span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
  <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> Go<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">virtual</span> ~Animal<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">class</span> SampleClass <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> Auto, <span style="color: #0000ff;">public</span> Animal<span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>	
	SampleClass <span style="color: #000040;">*</span>a <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> SampleClass<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
	<span style="color: #666666;">//a-&gt;Go(5); // Compiler error for ambigouity</span>
	<span style="color: #666666;">//a-&gt;Go(&quot;going&quot;); // Compiler error for missing method</span>
	Animal<span style="color: #000040;">*</span> an <span style="color: #000080;">=</span> <span style="color: #0000ff;">dynamic_cast</span><span style="color: #000080;">&lt;</span>Animal<span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	an<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Go<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
&nbsp;
	Auto<span style="color: #000040;">*</span> at <span style="color: #000080;">=</span> <span style="color: #0000ff;">dynamic_cast</span><span style="color: #000080;">&lt;</span>Auto<span style="color: #000040;">*</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	at<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>Go<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">7</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>When C# introduced dynamic type system and shared type system with C# 4, I thought it should be possible to express multiple inheritance using the new syntax. More like a forced Javascript prototypal inheritance instead of classical inheritance. However it turned out that it was even easier than that. It is relying on the runtime to operate on the types underlying with dynamic conversions, simply reflection.</p>
<p>Obviously it is not forced by the compiler, and you wouldn&#8217;t get intellisense but it will behave like a multiple inherited object. To achieve that the dynamic features of C# 4 has been used. </p>
<p>The same implementation in C# using Minherit object that has been created for reflected multiple inheritance.<br />
So in C#, it would look like this :</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> <span style="color: #0600FF;">Auto</span>
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Go<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> a<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span>            
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Animal
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Go<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><span style="color: #000000;">&#125;</span>        
    <span style="color: #000000;">&#125;</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> SampleClass <span style="color: #008000;">:</span> Minherit<span style="color: #008000;">&lt;</span><span style="color: #0600FF;">Auto</span>, Animal<span style="color: #008000;">&gt;</span>
    <span style="color: #000000;">&#123;</span>                        
        <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            dynamic sample <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SampleClass<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>            
            a.<span style="color: #0000FF;">Go</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">4</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// this will succeed at runtime and call the first Go(int)            </span>
            a.<span style="color: #0000FF;">Go</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;going&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// runtime error for missing method</span>
            Animal an <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>Animal<span style="color: #000000;">&#41;</span>sample<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">Auto</span> x <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">Auto</span><span style="color: #000000;">&#41;</span>sample<span style="color: #008000;">;</span>
&nbsp;
            an.<span style="color: #0000FF;">Go</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            x.<span style="color: #0000FF;">Go</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">7</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>            
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>It uses dynamic sample that has come with .NET Framework 4 CTP. I actually think that sample will go to mscorlib with the final release in the System namespace</p>
<p>As the code got a bit long, I post it as project zip file if you are interested.<br />
<div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/cs4trials.zip'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/tar.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/cs4trials.zip'> C# 4 Dynamic Multiple Inheritance</a>
							</h4><p>Downloads: 373  File Name: cs4trials.zip</p>
						</div></p>
<p>It is possible to create multiple inheritance abstraction as shown below. Here are the selected four methods to display how the GetMember and SetMember is implemented.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">  <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">object</span> Call<span style="color: #000000;">&#40;</span>CallAction action, <span style="color: #0600FF;">params</span> <span style="color: #FF0000;">object</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var objMethod <span style="color: #008000;">=</span> GetMember<span style="color: #008000;">&lt;</span>MethodInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                               GetMember<span style="color: #008000;">&lt;</span>MethodInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base1, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                   GetMember<span style="color: #008000;">&lt;</span>MethodInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base2, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>                                                     
&nbsp;
            <span style="color: #FF0000;">object</span> result <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
            <span style="color: #FF0000;">bool</span> executionSuccess <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var item <span style="color: #0600FF;">in</span> objMethod<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">try</span>
                <span style="color: #000000;">&#123;</span>                     
                    result <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Second</span>.<span style="color: #0000FF;">Invoke</span><span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">First</span>, args<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                    executionSuccess <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
                    break<span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">catch</span> 
                <span style="color: #000000;">&#123;</span>                    
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>executionSuccess<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> result<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> MissingMethodException<span style="color: #000000;">&#40;</span>action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>                    
        <span style="color: #000000;">&#125;</span>
 <span style="color: #0600FF;">private</span> IEnumerable<span style="color: #008000;">&lt;</span>Pair<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">object</span>, T<span style="color: #008000;">&gt;&gt;</span> GetMember<span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> obj, <span style="color: #FF0000;">string</span> name<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> from member <span style="color: #0600FF;">in</span> obj.<span style="color: #0000FF;">GetType</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">GetMember</span><span style="color: #000000;">&#40;</span>name<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">OfType</span><span style="color: #008000;">&lt;</span>T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
                   select <span style="color: #008000;">new</span> Pair<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">object</span>, T<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>obj, member<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">object</span> GetMember<span style="color: #000000;">&#40;</span>GetMemberAction action<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var property <span style="color: #008000;">=</span> GetMember<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                     GetMember<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base1, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                         GetMember<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base2, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">FirstOrDefault</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            var field <span style="color: #008000;">=</span> GetMember<span style="color: #008000;">&lt;</span>FieldInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                            GetMember<span style="color: #008000;">&lt;</span>FieldInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base1, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                GetMember<span style="color: #008000;">&lt;</span>FieldInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base2, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">FirstOrDefault</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>property <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> property.<span style="color: #0000FF;">Second</span>.<span style="color: #0000FF;">GetValue</span><span style="color: #000000;">&#40;</span>property.<span style="color: #0000FF;">First</span>, <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>field <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> field.<span style="color: #0000FF;">Second</span>.<span style="color: #0000FF;">GetValue</span><span style="color: #000000;">&#40;</span>field.<span style="color: #0000FF;">First</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> MissingMemberException<span style="color: #000000;">&#40;</span>action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> SetMember<span style="color: #000000;">&#40;</span>SetMemberAction action, <span style="color: #FF0000;">object</span> value<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var properties <span style="color: #008000;">=</span> GetMember<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                    GetMember<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base1, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                        GetMember<span style="color: #008000;">&lt;</span>PropertyInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base2, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            var fields <span style="color: #008000;">=</span> GetMember<span style="color: #008000;">&lt;</span>FieldInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                            GetMember<span style="color: #008000;">&lt;</span>FieldInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base1, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Concat</span><span style="color: #000000;">&#40;</span>
                                GetMember<span style="color: #008000;">&lt;</span>FieldInfo<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span>base2, action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #FF0000;">bool</span> issucceess <span style="color: #008000;">=</span> false<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var property <span style="color: #0600FF;">in</span> properties<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">try</span>
                <span style="color: #000000;">&#123;</span>
                    property.<span style="color: #0000FF;">Second</span>.<span style="color: #0000FF;">SetValue</span><span style="color: #000000;">&#40;</span>property.<span style="color: #0000FF;">First</span>, value, <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                    issucceess <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
                    break<span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span>             
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span>issucceess<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var field <span style="color: #0600FF;">in</span> fields<span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    <span style="color: #0600FF;">try</span>
                    <span style="color: #000000;">&#123;</span>
                        field.<span style="color: #0000FF;">Second</span>.<span style="color: #0000FF;">SetValue</span><span style="color: #000000;">&#40;</span>field.<span style="color: #0000FF;">First</span>, value<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                        issucceess <span style="color: #008000;">=</span> true<span style="color: #008000;">;</span>
                        break<span style="color: #008000;">;</span>
                    <span style="color: #000000;">&#125;</span>
                    <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span>
                <span style="color: #000000;">&#125;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span>issucceess<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> MissingMemberException<span style="color: #000000;">&#40;</span>action.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/multiple-inheritance-in-c-using-dynamic-features/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Next Generation Cryptography (CNG) for .NET</title>
		<link>http://www.codingday.com/next-generation-cryptography-cng-for-net/</link>
		<comments>http://www.codingday.com/next-generation-cryptography-cng-for-net/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 00:23:33 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.canerten.com/next-generation-cryptography-cng-for-net/</guid>
		<description><![CDATA[Last year, Windows Kernel team released a new cryptography libraries called Next Generation Cryptography (CNG). Although it is only available on Windows Vista and Windows Server 2008 kernels so far, I think it is going to replace the CAPICOM with its powerful new implementations. I quite liked the new CNG libraries as it gets over [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 5px 5px 0px" src="http://static.flickr.com/2308/2453544236_f1b1dac91d_t.jpg" border="0" alt="Droster Lock (Infinite Combination)" align="left" />Last year, Windows Kernel team released a new cryptography libraries called <a href="http://msdn.microsoft.com/en-us/library/aa376210(VS.85).aspx" target="_blank">Next Generation Cryptography (CNG).</a> Although it is only available on Windows Vista and Windows Server 2008 kernels so far, I think it is going to replace the <a href="http://msdn.microsoft.com/en-us/library/ms995332.aspx" target="_blank">CAPICOM</a> with its powerful new implementations.</p>
<p>I quite liked the new CNG libraries as it gets over some limitations of the previous library.</p>
<p>CLR security team released a new project on codeplex called <a href="http://www.codeplex.com/clrsecurity" target="_blank">CLR Security</a> for that new cryptography library on .NET. So it is possible to benefit from those libraries in managed worlds as well. For a detailed description be sure to check <a href="http://blogs.msdn.com/shawnfa/archive/2008/07/10/clr-security-team-codeplex-site.aspx" target="_blank">security blog</a>.</p>
<p>Also, the team is very quick to respond and provide fixes if necessary.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/next-generation-cryptography-cng-for-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>String Stream for .NET</title>
		<link>http://www.codingday.com/string-stream-for-net/</link>
		<comments>http://www.codingday.com/string-stream-for-net/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 01:11:17 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Stream]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[StringBuilder]]></category>

		<guid isPermaLink="false">http://www.canerten.com/?p=283</guid>
		<description><![CDATA[I was working with C++ Standard Template Library (STL) library and when using the StringStream class I felt like we need this for .NET Yes we have a great class StringBuilder but we can&#8217;t use it as a Stream (because it is not). Most of the cryptographic classes works with the stream object. I wanted [...]]]></description>
			<content:encoded><![CDATA[<p>I was working with C++ Standard Template Library (<a href="http://www.sgi.com/tech/stl/" target="_blank">STL</a>) library and when using the <a href="http://www.cplusplus.com/reference/iostream/stringstream/stringstream.html" target="_blank">StringStream</a> class I felt like we need this for .NET <img src='http://www.codingday.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Yes we have a great class StringBuilder but we can&#8217;t use it as a Stream (because it is not). </p>
<p>Most of the cryptographic classes works with the stream object. I wanted to save the encrypted information as text. Ideally we could use memoryStream but it is not really efficient, because it is bits and we need to build a model for serializing/deserializing as text.</p>
<p>String Stream class (as I call it) is just an ugly but functional wrapper around StringBuilder class as shown some snippets below. I just wanted it to use with encryption and decryption a string. So only the functions needed is there which is enough to use. But I doubt it leaks a little, so use with care if needed.</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> StringStream <span style="color: #008000;">:</span> Stream
<span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">private</span> StringBuilder strBuilder<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">public</span> StringStream<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            strBuilder <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> StringStream<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> str<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            strBuilder <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span>str<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">int</span> Read<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> buffer, <span style="color: #FF0000;">int</span> offset, <span style="color: #FF0000;">int</span> count<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #FF0000;">int</span> howMuchRead <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> offset<span style="color: #008000;">;</span> i <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> count<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                var actualIndex <span style="color: #008000;">=</span> i <span style="color: #008000;">*</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>                
                howMuchRead <span style="color: #008000;">=</span> i<span style="color: #008000;">+</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>actualIndex <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;=</span> strBuilder.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span> 
                <span style="color: #000000;">&#123;</span>
                    howMuchRead <span style="color: #008000;">=</span> count<span style="color: #008000;">;</span>
                    break<span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>                                   
                <span style="color: #FF0000;">string</span> s <span style="color: #008000;">=</span> strBuilder<span style="color: #000000;">&#91;</span>actualIndex<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> strBuilder<span style="color: #000000;">&#91;</span>actualIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                buffer<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> Convert.<span style="color: #0000FF;">ToByte</span><span style="color: #000000;">&#40;</span>s,<span style="color: #FF0000;">16</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">return</span> howMuchRead<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
      <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> Write<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> buffer, <span style="color: #FF0000;">int</span> offset, <span style="color: #FF0000;">int</span> count<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> offset<span style="color: #008000;">;</span> i <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> count<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                strBuilder.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>buffer<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;x2&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</p>
<p><div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/StringStream.cs'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/downloads.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/StringStream.cs'>StringStream</a>
							</h4><p>Downloads: 257  File Name: StringStream.cs</p>
						</div></p>
<p> The main magic is happening on reading and writing. each byte is represented as 2 characters in the string. It is using the helper function Convert.ToByte to make it happen.<br />
In the next post I will use it with a symmetric encryption helper class.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/string-stream-for-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visual Studio Dark Color Scheme</title>
		<link>http://www.codingday.com/my-visual-studio-color-scheme-friendly-ide/</link>
		<comments>http://www.codingday.com/my-visual-studio-color-scheme-friendly-ide/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 18:26:49 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.canerten.com/my-visual-studio-color-scheme-friendly-ide/</guid>
		<description><![CDATA[After reading interesting posts about the fonts and colors in Visual Studio, I gave a try to some of them. Because I work quite a lot with Visual Studio, I realized that it is actually very important for the eyes and for productivity. Unfortunately none of the themes have pleased my IDE concept, low contrast, [...]]]></description>
			<content:encoded><![CDATA[<p>After reading interesting posts about the fonts and colors in Visual Studio, I gave a try to some of them. Because I work quite a lot with Visual Studio, I realized that it is actually very important for the eyes and for productivity. Unfortunately none of the themes have pleased my IDE concept, low contrast, dark background, pale colours, clear type fonts, and follow metaphors. </p>
<p>I also put some time to design and experiment with some fonts and colours. The themes that I found were to dark for me with very high contrast, and the fonts were glowing.&#160; </p>
<p>This theme is still dark but with pale colours. More importantly it follows the metaphors we used to, so it will be OK when discussing with developers. What I mean? You know greenish parts of your code are always comments, or red parts of SQL code is bad (strings for dynamic SQL), as we all used to from visual studio, SQL or any popular IDEs.</p>
<p>One more thing is that when working with F# some of the color features are not the same as C#. So this theme is prepared with the F# projects in mind as well. Also HTML, CSS, JavaScript, and&#160; XAML are formatted following my colour preference.</p>
<p>For fonts I have used <a href="http://dejavu.sourceforge.net/wiki/index.php/Main_Page" target="_blank">DejaVu</a> font with size 10. If <a href="http://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3&amp;displaylang=en" target="_blank">Consolas</a> is your favourite font than, it would be better to put on size 9. </p>
<p>Moreover if you use, ReSharper code refactoring tool it has also some colour highlights for it as well. But it is not a problem if you don&#8217;t.</p>
<p><div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Dark_IDE_2010.zip'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/tar.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Dark_IDE_2010.zip'>Dark Color Scheme for Visual Studio 2010</a>
							</h4><p>Downloads: 59  File Name: Dark_IDE_2010.zip</p>
						</div><br />
<div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Friendly_IDE_2008.zip'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/tar.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Friendly_IDE_2008.zip'>Friendly IDE for Visual Studio 2008</a>
							</h4><p>Downloads: 1608  File Name: Friendly_IDE_2008.zip</p>
						</div><br />
<div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Friendly_IDE_2005.zip'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/tar.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Friendly_IDE_2005.zip'>Friendly IDE for Visual Studio 2005</a>
							</h4><p>Downloads: 572  File Name: Friendly_IDE_2005.zip</p>
						</div></p>
<p>C# &#8211; F# Scheme</p>
<p><a href="http://www.codingday.com/wp-content/uploads/2008/03/cs.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="cs" src="http://www.codingday.com/wp-content/uploads/2008/03/cs-thumb.png" width="244" height="193" /></a>&#160;<a href="http://www.codingday.com/wp-content/uploads/2008/03/fs.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="fs" src="http://www.codingday.com/wp-content/uploads/2008/03/fs-thumb.png" width="244" height="204" /></a>&#160; </p>
<p>ASPX &#8211; HTML &#8211; XML Scheme</p>
<p><a href="http://www.codingday.com/wp-content/uploads/2008/03/aspxhtml.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="aspxhtml" src="http://www.codingday.com/wp-content/uploads/2008/03/aspxhtml-thumb.png" width="244" height="174" /></a>&#160; <a href="http://www.codingday.com/wp-content/uploads/2008/03/xml.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" border="0" alt="xml" src="http://www.codingday.com/wp-content/uploads/2008/03/xml-thumb.png" width="244" height="202" /></a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/my-visual-studio-color-scheme-friendly-ide/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>LINQ Expression Trees-Lambdas to CodeDom Conversion</title>
		<link>http://www.codingday.com/meta-programming-with-expression-trees-lambdas-to-codedom-conversion/</link>
		<comments>http://www.codingday.com/meta-programming-with-expression-trees-lambdas-to-codedom-conversion/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 00:23:34 +0000</pubDate>
		<dc:creator>Can</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[linq]]></category>

		<guid isPermaLink="false">http://www.canerten.com/meta-programming-with-expression-trees-lambdas-to-codedom-conversion/</guid>
		<description><![CDATA[Introduction Some people are working to make the meta-programming possible. Some says as language oriented programming or domain specific language, but I prefer in general as meta-programming. For years programming languages supported to generate code with the powerful libraries or developers worked just with string concatenations and external linkers. Nowadays meta-programming is getting more and [...]]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>Some people are working to make the meta-programming possible. Some says as language oriented programming or domain specific language, but I prefer in general as meta-programming. For years programming languages supported to generate code with the powerful libraries or developers worked just with string concatenations and external linkers.
<p>Nowadays meta-programming is getting more and more important as the domain expertise required. So the languages make meta programming possible at the compiler level with compiler directives.
<p>Indeed there a lot of ideas coming from functional programming world where everything treated as expressions.&nbsp; The code becomes data and data usage happens in the code. It should sound familiar with LINQ to SQL efforts to make this possible.<br />
<h1>Libraries</h1>
<p>.NET Framework had code generators since the beginning. CodeDom is probably the best known for tree based code generation. Codedom made possible to develop the ASP.NET engine, Windows Form designer, Web form designer, Web services wrapper LINQ entity objects and more. It is used extensively by the framework for the key technologies.
<p>Although there are other APIs in .NET framework such as System.Reflection, System.Reflection.Emit, in this post we will focus on CodeDom and the new comer Expression Trees.
<p>Expression Tree is the key API behind LINQ to SQL or IQueryable interface in general. Every query is expressed as typed trees that is parsed and converted to SQL later by the library.
<p>The syntax of expressing queries is very readable with query comprehension syntax. However sometimes I want to know about the generated tree, like actually which functions are getting involved in the query. I have used <a href="http://blogs.msdn.com/charlie/archive/2008/01/31/expression-tree-basics.aspx" target="_blank">Expression Tree Debugger Visualizer</a> to draw the tree. It is pretty handy tool but for big trees it is difficult to see what is going on. This was my main motivation actually, although we had the code, we don&#8217;t see what&#8217;s the magic going on with query comprehension.<br />
<h1>Implementation</h1>
<p>So the idea is to have the code regenerated from the tree. In the real world this will involve a parser, interpreter and some more compiler theory which requires a lot of research. And because this is just for fun and since we have a powerful CodeDom library to generate code, I tried to convert the expression tree to CodeDom tree. Than used the CodeDom to generate code in any language. Finally I wrote the extension methods so that the debuggers and my code can use it directly from the type.</p>
<p>The compiler generates automatically the expression trees if we use the proper syntax. So from the beginning we have the tree. In order to convert to CodeDom objects, we need to traverse the tree and generate the necessary CodeDom objects. So I wrote a&nbsp; tree walker that generates a CodeDom object to is parent while going to the last children. I didn&#8217;t realise how far it is going but that was it. When the tree walker finished with some more few lines of code the converter was just working. </p>
<p>I would like to put the code here as well but unfortunately it is too long for a blog post, so here are some snippets. Feel free to provide suggestions or bug reports.</p>
<p>LINQ Expression Visitor that generates CodeDom Trees
</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Collections.ObjectModel</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Linq.Expressions</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Reflection</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.CodeDom</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.CodeDom.Compiler</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">namespace</span> ExpressionToCodedom
<span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span>  <span style="color: #FF0000;">class</span> CodeDomExpressionVisitor
    <span style="color: #000000;">&#123;</span>
&nbsp;
        Expression m_exp<span style="color: #008000;">;</span>
        Dictionary<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span>, CodeTypeMember<span style="color: #008000;">&gt;</span> m_members<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> CodeDomExpressionVisitor<span style="color: #000000;">&#40;</span>Expression e<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            m_exp <span style="color: #008000;">=</span> e<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">internal</span> <span style="color: #FF0000;">string</span> GenerateSource<span style="color: #000000;">&#40;</span>CodeDomProvider codeProvider<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            StringBuilder sb <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            TextWriter tWriter <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> IndentedTextWriter<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> StringWriter<span style="color: #000000;">&#40;</span>sb<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            CodeCompileUnit ccu <span style="color: #008000;">=</span> GenerateCode<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            codeProvider.<span style="color: #0000FF;">GenerateCodeFromCompileUnit</span><span style="color: #000000;">&#40;</span>ccu, tWriter, <span style="color: #008000;">new</span> CodeGeneratorOptions<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            codeProvider.<span style="color: #0000FF;">Dispose</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            tWriter.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> sb.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">internal</span> <span style="color: #FF0000;">string</span> GenerateSource<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> language<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
&nbsp;
            CodeDomProvider codeProvider<span style="color: #008000;">=</span>null<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>language <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;cs&quot;</span><span style="color: #000000;">&#41;</span>
                codeProvider <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Microsoft.<span style="color: #0000FF;">CSharp</span>.<span style="color: #0000FF;">CSharpCodeProvider</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>language <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;vb&quot;</span><span style="color: #000000;">&#41;</span>
                codeProvider <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Microsoft.<span style="color: #0000FF;">VisualBasic</span>.<span style="color: #0000FF;">VBCodeProvider</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>                
&nbsp;
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;make sure you are trying to load a CodeDomProvider assembly&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">return</span> GenerateSource<span style="color: #000000;">&#40;</span>codeProvider<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> 
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> GenerateSource<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> GenerateSource<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;cs&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> 
        <span style="color: #000000;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #0600FF;">private</span> CodeCompileUnit GenerateCode<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var code <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeCompileUnit<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            m_members <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span>, CodeTypeMember<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            var LambdaTypeClass <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeTypeDeclaration<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;LambdaExpression&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            var ns <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeNamespace<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Runtime&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            ns.<span style="color: #0000FF;">Types</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>LambdaTypeClass<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>            
            ns.<span style="color: #0000FF;">Imports</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeNamespaceImport<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;System&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">// add more types in case I want to compile</span>
&nbsp;
            code.<span style="color: #0000FF;">Namespaces</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>ns<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            CodeObject cEvaluationResult <span style="color: #008000;">=</span> Visit<span style="color: #000000;">&#40;</span>m_exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            var constructor <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeConstructor<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>cEvaluationResult <span style="color: #008000;">is</span> CodeStatement<span style="color: #000000;">&#41;</span>
                constructor.<span style="color: #0000FF;">Statements</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>cEvaluationResult <span style="color: #0600FF;">as</span> CodeStatement<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>cEvaluationResult <span style="color: #008000;">is</span> CodeExpression<span style="color: #000000;">&#41;</span>
                constructor.<span style="color: #0000FF;">Statements</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>cEvaluationResult <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            LambdaTypeClass.<span style="color: #0000FF;">Members</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>constructor<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var item <span style="color: #0600FF;">in</span> m_members<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                LambdaTypeClass.<span style="color: #0000FF;">Members</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> code<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject Visit<span style="color: #000000;">&#40;</span>Expression exp<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>exp <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
                <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">switch</span> <span style="color: #000000;">&#40;</span>exp.<span style="color: #0000FF;">NodeType</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Negate</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">NegateChecked</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Not</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Convert</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ConvertChecked</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ArrayLength</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Quote</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">TypeAs</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitUnary</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>UnaryExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Add</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">AddChecked</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Subtract</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">SubtractChecked</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Multiply</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">MultiplyChecked</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Divide</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Modulo</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">And</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">AndAlso</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Or</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">OrElse</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">LessThan</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">LessThanOrEqual</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">GreaterThan</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">GreaterThanOrEqual</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Equal</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">NotEqual</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Coalesce</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ArrayIndex</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">RightShift</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">LeftShift</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ExclusiveOr</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitBinary</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>BinaryExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">TypeIs</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitTypeIs</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>TypeBinaryExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Conditional</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitConditional</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>ConditionalExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Constant</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitConstant</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>ConstantExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Parameter</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitParameter</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>ParameterExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">MemberAccess</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitMemberAccess</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>MemberExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Call</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitMethodCall</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>MethodCallExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Lambda</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitLambda</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>LambdaExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #008000;">New</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitNew</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>NewExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">NewArrayInit</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">NewArrayBounds</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitNewArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>NewArrayExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Invoke</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitInvocation</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>InvocationExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">MemberInit</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitMemberInit</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>MemberInitExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ListInit</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitListInit</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>ListInitExpression<span style="color: #000000;">&#41;</span>exp<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">default</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Unhandled expression type: '{0}'&quot;</span>, exp.<span style="color: #0000FF;">NodeType</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitBinding<span style="color: #000000;">&#40;</span>MemberBinding binding<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            <span style="color: #0600FF;">switch</span> <span style="color: #000000;">&#40;</span>binding.<span style="color: #0000FF;">BindingType</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">case</span> MemberBindingType.<span style="color: #0000FF;">Assignment</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitMemberAssignment</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>MemberAssignment<span style="color: #000000;">&#41;</span>binding<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> MemberBindingType.<span style="color: #0000FF;">MemberBinding</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitMemberMemberBinding</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>MemberMemberBinding<span style="color: #000000;">&#41;</span>binding<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> MemberBindingType.<span style="color: #0000FF;">ListBinding</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitMemberListBinding</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>MemberListBinding<span style="color: #000000;">&#41;</span>binding<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">default</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Unhandled binding type '{0}'&quot;</span>, binding.<span style="color: #0000FF;">BindingType</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeExpression VisitElementInitializer<span style="color: #000000;">&#40;</span>ElementInit initializer<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            ReadOnlyCollection<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> arguments <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitExpressionList</span><span style="color: #000000;">&#40;</span>initializer.<span style="color: #0000FF;">Arguments</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeMethodInvokeExpression<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeMethodReferenceExpression<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeThisReferenceExpression<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>,initializer.<span style="color: #0000FF;">AddMethod</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>, arguments.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>                               
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitUnary<span style="color: #000000;">&#40;</span>UnaryExpression u<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            CodeObject operand <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>u.<span style="color: #0000FF;">Operand</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> operand<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> CodeBinaryOperatorType BindOperant<span style="color: #000000;">&#40;</span>ExpressionType e<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">switch</span> <span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Add</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">AddChecked</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">Add</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">And</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">BitwiseAnd</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">AndAlso</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">BooleanAnd</span><span style="color: #008000;">;</span>                  
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Or</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">BitwiseOr</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">OrElse</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">BooleanOr</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ExclusiveOr</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">ArrayIndex</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Coalesce</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">RightShift</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">LeftShift</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> NotSupportedException<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;no direct equivalent in codedom,so workarounds not implemented&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Equal</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">IdentityEquality</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">NotEqual</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">IdentityInequality</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">GreaterThan</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">GreaterThan</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">GreaterThanOrEqual</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">GreaterThanOrEqual</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">LessThan</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">LessThan</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">LessThanOrEqual</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">LessThanOrEqual</span><span style="color: #008000;">;</span>                    
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Multiply</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">MultiplyChecked</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">Multiply</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Subtract</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">SubtractChecked</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">Subtract</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Power</span><span style="color: #008000;">:</span>
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Divide</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">Divide</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">case</span> ExpressionType.<span style="color: #0000FF;">Modulo</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> CodeBinaryOperatorType.<span style="color: #0000FF;">Modulus</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">default</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;are you sure you are right?&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeBinaryOperatorExpression VisitBinary<span style="color: #000000;">&#40;</span>BinaryExpression b<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var left <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>b.<span style="color: #0000FF;">Left</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
            var right <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>b.<span style="color: #0000FF;">Right</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
            CodeObject conversion <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>b.<span style="color: #0000FF;">Conversion</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            CodeBinaryOperatorType operant <span style="color: #008000;">=</span> BindOperant<span style="color: #000000;">&#40;</span>b.<span style="color: #0000FF;">NodeType</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>           
            var condExpr <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeBinaryOperatorExpression<span style="color: #000000;">&#40;</span>left, operant, right<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> condExpr<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitTypeIs<span style="color: #000000;">&#40;</span>TypeBinaryExpression b<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            CodeObject expr <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>b.<span style="color: #0000FF;">Expression</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>          
            <span style="color: #0600FF;">return</span> expr<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeExpression VisitConstant<span style="color: #000000;">&#40;</span>ConstantExpression c<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodePrimitiveExpression<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">Value</span>.<span style="color: #0000FF;">GetType</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">IsValueType</span> <span style="color: #008000;">||</span> c.<span style="color: #0000FF;">Value</span>.<span style="color: #0000FF;">GetType</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #008000;">typeof</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                   <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodePrimitiveExpression<span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">Value</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeVariableReferenceExpression<span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">Value</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>             
            <span style="color: #000000;">&#125;</span>                        
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitConditional<span style="color: #000000;">&#40;</span>ConditionalExpression c<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            CodeObject test <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">Test</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            CodeExpression ifTrue <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">IfTrue</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
            CodeExpression ifFalse <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>c.<span style="color: #0000FF;">IfFalse</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
&nbsp;
            var ifStatement <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeConditionStatement<span style="color: #000000;">&#40;</span>test <span style="color: #0600FF;">as</span> CodeExpression,
                                                         <span style="color: #008000;">new</span> CodeStatement<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span><span style="color: #008000;">new</span> CodeExpressionStatement<span style="color: #000000;">&#40;</span>ifTrue<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span>, 
                                                         <span style="color: #008000;">new</span> CodeStatement<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span><span style="color: #008000;">new</span> CodeExpressionStatement<span style="color: #000000;">&#40;</span>ifFalse<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>                    
            <span style="color: #0600FF;">return</span> ifStatement<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitParameter<span style="color: #000000;">&#40;</span>ParameterExpression p<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeArgumentReferenceExpression<span style="color: #000000;">&#40;</span>p.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>            
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitMemberAccess<span style="color: #000000;">&#40;</span>MemberExpression m<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            CodeObject exp <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Expression</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>exp <span style="color: #008000;">is</span> CodePrimitiveExpression<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> exp<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                Type memType<span style="color: #008000;">;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">MemberType</span> <span style="color: #008000;">==</span> MemberTypes.<span style="color: #0000FF;">Field</span><span style="color: #000000;">&#41;</span>
                    memType <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Member</span> <span style="color: #0600FF;">as</span> FieldInfo<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">FieldType</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">else</span> memType <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Member</span> <span style="color: #0600FF;">as</span> PropertyInfo<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">PropertyType</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
                m_members<span style="color: #000000;">&#91;</span>m.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeMemberField<span style="color: #000000;">&#40;</span>memType, m.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeVariableReferenceExpression<span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>    
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitMethodCall<span style="color: #000000;">&#40;</span>MethodCallExpression m<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>           
            CodeObject obj <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>m.<span style="color: #FF0000;">Object</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> args <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitExpressionList</span><span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Arguments</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>obj <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>  <span style="color: #008080; font-style: italic;">//static method call</span>
                <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeMethodInvokeExpression<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeTypeReferenceExpression<span style="color: #000000;">&#40;</span>m.<span style="color: #0000FF;">Method</span>.<span style="color: #0000FF;">DeclaringType</span><span style="color: #000000;">&#41;</span>,m.<span style="color: #0000FF;">Method</span>.<span style="color: #0000FF;">Name</span>,args.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>                
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeMethodInvokeExpression<span style="color: #000000;">&#40;</span>obj <span style="color: #0600FF;">as</span> CodeExpression, m.<span style="color: #0000FF;">Method</span>.<span style="color: #0000FF;">Name</span>, args.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>   
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> ReadOnlyCollection<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> VisitExpressionList<span style="color: #000000;">&#40;</span>ReadOnlyCollection<span style="color: #008000;">&lt;</span>Expression<span style="color: #008000;">&gt;</span> original<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            List<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> list <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, n <span style="color: #008000;">=</span> original.<span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> n<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                CodeExpression p <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>CodeExpression<span style="color: #000000;">&#41;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>original<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>                
                    list.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>p<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>                
            <span style="color: #000000;">&#125;</span>            
            <span style="color: #0600FF;">return</span> list.<span style="color: #0000FF;">AsReadOnly</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeExpression VisitMemberAssignment<span style="color: #000000;">&#40;</span>MemberAssignment assignment<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span><span style="color: #008080; font-style: italic;">// thhose are properties</span>
&nbsp;
            CodeObject e <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>assignment.<span style="color: #0000FF;">Expression</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> e <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitMemberMemberBinding<span style="color: #000000;">&#40;</span>MemberMemberBinding binding<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> bindings <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitBindingList</span><span style="color: #000000;">&#40;</span>binding.<span style="color: #0000FF;">Bindings</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeObjectCreateExpression<span style="color: #000000;">&#40;</span>binding.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span>, bindings.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>            
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitMemberListBinding<span style="color: #000000;">&#40;</span>MemberListBinding binding<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> initializers <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitElementInitializerList</span><span style="color: #000000;">&#40;</span>binding.<span style="color: #0000FF;">Initializers</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeObjectCreateExpression<span style="color: #000000;">&#40;</span>binding.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span>, initializers.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> VisitBindingList<span style="color: #000000;">&#40;</span>ReadOnlyCollection<span style="color: #008000;">&lt;</span>MemberBinding<span style="color: #008000;">&gt;</span> original<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            List<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> list <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, n <span style="color: #008000;">=</span> original.<span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> n<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                CodeExpression b <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitBinding</span><span style="color: #000000;">&#40;</span>original<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
&nbsp;
                    list.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>b<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">return</span> list<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> VisitElementInitializerList<span style="color: #000000;">&#40;</span>ReadOnlyCollection<span style="color: #008000;">&lt;</span>ElementInit<span style="color: #008000;">&gt;</span> original<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            List<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> list <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, n <span style="color: #008000;">=</span> original.<span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> n<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                CodeExpression init <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitElementInitializer</span><span style="color: #000000;">&#40;</span>original<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                list.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>init<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> list<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> CodeMethodReferenceExpression VisitLambda<span style="color: #000000;">&#40;</span>LambdaExpression lambda<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var  body <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>lambda.<span style="color: #0000FF;">Body</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            var lambdaMethod <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeMemberMethod<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            lambdaMethod.<span style="color: #0000FF;">Name</span> <span style="color: #008000;">=</span> lambda.<span style="color: #0000FF;">Type</span>.<span style="color: #0000FF;">Name</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>lambdaMethod.<span style="color: #0000FF;">Name</span>.<span style="color: #0000FF;">Contains</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Func&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
                lambdaMethod.<span style="color: #0000FF;">ReturnType</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeTypeReference<span style="color: #000000;">&#40;</span>lambda.<span style="color: #0000FF;">Body</span>.<span style="color: #0000FF;">Type</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var item <span style="color: #0600FF;">in</span> lambda.<span style="color: #0000FF;">Parameters</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                lambdaMethod.<span style="color: #0000FF;">Parameters</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeParameterDeclarationExpression<span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">Type</span>, item.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>body <span style="color: #008000;">is</span> CodeExpression<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>lambdaMethod.<span style="color: #0000FF;">ReturnType</span>.<span style="color: #0000FF;">BaseType</span>.<span style="color: #0000FF;">Contains</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Void&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
                    lambdaMethod.<span style="color: #0000FF;">Statements</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>body <span style="color: #0600FF;">as</span> CodeExpression <span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
                <span style="color: #0600FF;">else</span>
                    lambdaMethod.<span style="color: #0000FF;">Statements</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeMethodReturnStatement<span style="color: #000000;">&#40;</span>body <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>body <span style="color: #008000;">is</span> CodeStatement<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                    lambdaMethod.<span style="color: #0000FF;">Statements</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>body <span style="color: #0600FF;">as</span> CodeStatement<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;investigate...&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
            m_members<span style="color: #000000;">&#91;</span>lambda.<span style="color: #0000FF;">Type</span>.<span style="color: #0000FF;">FullName</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> lambdaMethod<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeMethodReferenceExpression<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeThisReferenceExpression<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, lambdaMethod.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitNew<span style="color: #000000;">&#40;</span>NewExpression nex<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> args <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitExpressionList</span><span style="color: #000000;">&#40;</span>nex.<span style="color: #0000FF;">Arguments</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeObjectCreateExpression<span style="color: #000000;">&#40;</span>nex.<span style="color: #0000FF;">Type</span>.<span style="color: #0000FF;">Name</span>,args.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitMemberInit<span style="color: #000000;">&#40;</span>MemberInitExpression init<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            CodeObject n <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitNew</span><span style="color: #000000;">&#40;</span>init.<span style="color: #0000FF;">NewExpression</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            CodeExpression<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> bindings <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitBindingList</span><span style="color: #000000;">&#40;</span>init.<span style="color: #0000FF;">Bindings</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//binding will return property initialisation</span>
&nbsp;
&nbsp;
            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> init.<span style="color: #0000FF;">Bindings</span>.<span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>            
            <span style="color: #000000;">&#123;</span>
                                                                    <span style="color: #008080; font-style: italic;">// need to do something with that////</span>
                var assignProperty <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> CodeAssignStatement<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodePropertyReferenceExpression<span style="color: #000000;">&#40;</span>
                            n <span style="color: #0600FF;">as</span> CodeExpression, init.<span style="color: #0000FF;">Bindings</span><span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">Member</span>.<span style="color: #0000FF;">Name</span><span style="color: #000000;">&#41;</span>, bindings<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>                                   
&nbsp;
            <span style="color: #0600FF;">return</span> n<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitListInit<span style="color: #000000;">&#40;</span>ListInitExpression init<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            CodeObject n <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitNew</span><span style="color: #000000;">&#40;</span>init.<span style="color: #0000FF;">NewExpression</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> initializers <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitElementInitializerList</span><span style="color: #000000;">&#40;</span>init.<span style="color: #0000FF;">Initializers</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> n<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitNewArray<span style="color: #000000;">&#40;</span>NewArrayExpression na<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> exprs <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitExpressionList</span><span style="color: #000000;">&#40;</span>na.<span style="color: #0000FF;">Expressions</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeArrayCreateExpression<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeTypeReference<span style="color: #000000;">&#40;</span>na.<span style="color: #0000FF;">Type</span><span style="color: #000000;">&#41;</span>, exprs.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">virtual</span> CodeObject VisitInvocation<span style="color: #000000;">&#40;</span>InvocationExpression iv<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>            
            IEnumerable<span style="color: #008000;">&lt;</span>CodeExpression<span style="color: #008000;">&gt;</span> args <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">VisitExpressionList</span><span style="color: #000000;">&#40;</span>iv.<span style="color: #0000FF;">Arguments</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            var expr <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Visit</span><span style="color: #000000;">&#40;</span>iv.<span style="color: #0000FF;">Expression</span><span style="color: #000000;">&#41;</span> <span style="color: #0600FF;">as</span> CodeExpression<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> CodeMethodInvokeExpression<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> CodeMethodReferenceExpression<span style="color: #000000;">&#40;</span>expr, <span style="color: #666666;">&quot;Method&quot;</span><span style="color: #000000;">&#41;</span>, args.<span style="color: #0000FF;">ToArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>            
        <span style="color: #000000;">&#125;</span>      
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>
<div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Expression_Source.zip'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/tar.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/Expression_Source.zip'>Expression Tree to CodeDom Source Code</a>
							</h4><p>Downloads: 227  File Name: Expression_Source.zip</p>
						</div><br />
<div class='download-link'>
							<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/ExpressionToCodedom.dll'><img alt='Download' class='leftalign' src='http://www.codingday.com/wp-content/plugins/dBeautifier/icons/downloads.png' /></a>
							<h4>
								<a href='http://www.codingday.com/download.php?file=http://www.codingday.com/downloads/ExpressionToCodedom.dll'>Expression Tree to CodeDom DLL</a>
							</h4><p>Downloads: 126  File Name: ExpressionToCodedom.dll</p>
						</div>
</p>
<h1>Example</h1>
<p>The extension methods enables to see the source code of any IQueryable and any Expression. Any of them have a GenerateSourceCodeMethod that gives back a string.</p>
<p><a href='http://www.codingday.com/wp-content/uploads/2008/02/visualizer.jpg' title='Expression Tree to CodeDom Visualizer'><img src='http://www.codingday.com/wp-content/uploads/2008/02/visualizer.thumbnail.jpg' alt='Expression Tree to CodeDom Visualizer' /></a></p>
<p>GenerateSourceCode(); // default C#</p>
<p>GenerateSourceCode(string language); // either cs or vb as input or&nbsp; Fully qualified name of the CodeDomProvider (like Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider) It should be added as a reference to the project if you&#8217;re going to use it. </p>
<p>
Sample program that manipulates the expression trees and usage of CodeDom Converter with &#8220;item.GetCodeDomSource(&#8220;vb&#8221;)&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">int</span> a <span style="color: #008000;">=</span> <span style="color: #FF0000;">3</span>, c <span style="color: #008000;">=</span> <span style="color: #FF0000;">2</span>, d <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
&nbsp;
var e1 <span style="color: #008000;">=</span> Expression.<span style="color: #0000FF;">Constant</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">5</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
var e2 <span style="color: #008000;">=</span> Expression.<span style="color: #0000FF;">And</span><span style="color: #000000;">&#40;</span>e1, e1<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span>, Func<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">bool</span><span style="color: #008000;">&gt;&gt;&gt;</span> e3 <span style="color: #008000;">=</span> tbool <span style="color: #008000;">=&gt;</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> a <span style="color: #008000;">&lt;</span> b <span style="color: #008000;">&amp;&amp;</span> <span style="color: #FF0000;">8</span> <span style="color: #008000;">&gt;</span> d <span style="color: #008000;">||</span> c <span style="color: #008000;">==</span> d<span style="color: #008000;">;</span>
Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">bool</span><span style="color: #008000;">&gt;&gt;</span> e4 <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> b <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">4</span><span style="color: #008000;">;</span>
Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>RecordName, <span style="color: #FF0000;">bool</span><span style="color: #008000;">&gt;&gt;</span> e5 <span style="color: #008000;">=</span> rn <span style="color: #008000;">=&gt;</span> rn.<span style="color: #0000FF;">LastName</span> <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;ALFKI&quot;</span><span style="color: #008000;">;</span>
Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span>StringBuilder<span style="color: #008000;">&gt;&gt;</span> e6 <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">=&gt;</span> <span style="color: #008000;">new</span> StringBuilder <span style="color: #000000;">&#123;</span> Capacity <span style="color: #008000;">=</span> <span style="color: #FF0000;">20</span> <span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
Expression<span style="color: #008000;">&lt;</span>Func<span style="color: #008000;">&lt;</span><span style="color: #FF0000;">string</span>, <span style="color: #FF0000;">string</span><span style="color: #008000;">&gt;&gt;</span> e7 <span style="color: #008000;">=</span> word <span style="color: #008000;">=&gt;</span> word <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;hello&quot;</span> <span style="color: #008000;">?</span> <span style="color: #666666;">&quot;yes&quot;</span> <span style="color: #008000;">:</span> <span style="color: #666666;">&quot;no&quot;</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
<span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>var item <span style="color: #0600FF;">in</span> <span style="color: #008000;">new</span> Expression<span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> e1, e2, e3, e4, e5, e6,e7 <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">GetCodeDomSource</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;vb&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Visual Basic Output</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;">Namespace Runtime
&nbsp;
    <span style="color: #000080;">Public</span> Class LambdaExpression
&nbsp;
        <span style="color: #000080;">Private</span> LastName <span style="color: #000080;">As</span> <span style="color: #000080;">String</span>
&nbsp;
        <span style="color: #000080;">Private</span> <span style="color: #000080;">Sub</span> <span style="color: #000080;">New</span>()
            MyBase.<span style="color: #000080;">New</span>
            Me.Func`2
        <span style="color: #000080;">End</span> <span style="color: #000080;">Sub</span>
&nbsp;
        <span style="color: #000080;">Private</span> <span style="color: #000080;">Function</span> Func`2(<span style="color: #000080;">ByVal</span> rn <span style="color: #000080;">As</span> Demo.Program.RecordName) <span style="color: #000080;">As</span> <span style="color: #000080;">Boolean</span>
            Return (LastName <span style="color: #000080;">Is</span> <span style="color: #800000;">&quot;ALFKI&quot;</span>)
        <span style="color: #000080;">End</span> <span style="color: #000080;">Function</span>
    <span style="color: #000080;">End</span> Class
<span style="color: #000080;">End</span> Namespace</pre></div></div>

<p>C# Output</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">namespace</span> Runtime <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
&nbsp;
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> LambdaExpression <span style="color: #000000;">&#123;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> LastName<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> LambdaExpression<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Func</span>`<span style="color: #FF0000;">2</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">bool</span> Func`<span style="color: #FF0000;">2</span><span style="color: #000000;">&#40;</span>Demo.<span style="color: #0000FF;">Program</span>.<span style="color: #0000FF;">RecordName</span> rn<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #000000;">&#40;</span>LastName <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;ALFKI&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</p>
<h1>Conclusion</h1>
<p>Codedom is too much C# centric, so it&#8217;s hard to make it available for every language. The difference between Code Statement  and Code Expressions  sometimes  makes it hard to convert from expression trees.  </p>
<p>
On the on the other hand Expression trees are too much LINQ oriented. They are less powerful than CodeDom but more easy to express. In expression trees everything is an expression unlike CodeDom. Some constructs are missing from expression trees like the assignment, but we will probably see the improvements in the expression trees in the future. So it might not be a true DSL or language generator, but sure it is enough to get the most of the databases. </p>
<p>There are some other more powerful meta-programming tools and libraries. F# quotation library supports all the available  full-set language features expressed as quotations. Dynamic Language Runtime is another expression tree like library focussed more on compiler developers. </p>
<p>
Finally this library is not build for runtime code conversion from expression tree to CodeDom, although it is possible. The CodeDom generated code is mainly for debugging to print the source code of the query. It might also be helpful for seeing what is going on under the hood.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codingday.com/meta-programming-with-expression-trees-lambdas-to-codedom-conversion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
