<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Caught By .Net! - LINQ and C# 3.0</title>
    <link>http://blog.stoneskins.com/</link>
    <description>Stoneskin's Notes</description>
    <language>en-us</language>
    <copyright>SunStone Solutions &amp; C LLC</copyright>
    <lastBuildDate>Tue, 26 Aug 2008 02:41:23 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.12105.0</generator>
    <managingEditor>stoneskin@gmail.com</managingEditor>
    <webMaster>stoneskin@gmail.com</webMaster>
    <item>
      <trackback:ping>http://blog.stoneskins.com/Trackback.aspx?guid=21920d6c-89dc-4853-93b8-0f89ac3dde52</trackback:ping>
      <pingback:server>http://blog.stoneskins.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.stoneskins.com/PermaLink,guid,21920d6c-89dc-4853-93b8-0f89ac3dde52.aspx</pingback:target>
      <dc:creator>stoneskin</dc:creator>
      <wfw:comment>http://blog.stoneskins.com/CommentView,guid,21920d6c-89dc-4853-93b8-0f89ac3dde52.aspx</wfw:comment>
      <wfw:commentRss>http://blog.stoneskins.com/SyndicationService.asmx/GetEntryCommentsRss?guid=21920d6c-89dc-4853-93b8-0f89ac3dde52</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Sometime I need resort the ArrayList or
List&lt;T&gt; in my code. I am too lazy to write a piece of code to implement IComparer.
When I search through google, I found there is a very elegant way to do the sorting:<br /><pre>[code]<br />
peopleList.Sort(<br />
delegate(Person p1, Person p2) 
<br />
{ 
<br />
return p1.name.CompareTo(p2.name); 
<br />
}<br />
);<br /><br />
peopleList.ForEach(delegate(Person p) { Console.WriteLine(String.Format("{0} {1}",
p.age, p.name)); });<br /><br />
[/code]<br /></pre>I have used code like this many times, but actually I didn't really understand
why code can be wrote like this. 
<br />
Those are some different way to sorting in different version of .net frameworks,<br />
and those articles helping me to understand the sorting code better.<br /><br />
Thanks to <a class="bigusername" href="http://bbs.et8.net/bbs/member.php?u=25399">happy九拍</a><br /><div id="post_message_9805999" style="overflow-x: hidden;">如果不用匿名方法，我们1.1里就的这么写<br /><br /><div style="margin: 5px 20px 20px;"><div class="smallfont" style="margin-bottom: 2px;">代码:
</div><pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 5px; overflow: auto; width: 640px; height: 82px; text-align: left;">static int Compare(Person p1, Person p2)<br />
{<br />
return p1.name.CompareTo(p2.name);<br />
}</pre></div>
然后<br /><div style="margin: 5px 20px 20px;"><div class="smallfont" style="margin-bottom: 2px;">代码:
</div><pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 5px; overflow: auto; width: 640px; height: 34px; text-align: left;">people.Sort(new Comparison&lt;Preson&gt;(Compare));</pre></div>
你的问题解决了，在C#3.0里，我们不再需要匿名方法了，直接lambda咯<br /><div style="margin: 5px 20px 20px;"><div class="smallfont" style="margin-bottom: 2px;">代码:
</div><pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 5px; overflow: auto; width: 640px; height: 34px; text-align: left;">people.Sort((p1, p2) =&gt; p1.name.CompareTo(p2.name));</pre></div></div><br />
Thanks to <a class="bigusername" href="http://bbs.et8.net/bbs/member.php?u=69316">Shadal</a>:<br />
2.0可以这样写<br />
static int Compare(Person p1, Person p2)<br />
{<br />
return p1.name.CompareTo(p2.name);<br />
}<br /><br />
people.Sort(Compare);<br /><br /><br /><br /><br /><br />
An userful article: 
<br /><h2><font size="2"><a style="text-decoration: none;" href="http://www.west-wind.com/Weblog/posts/330694.aspx">Variable
Scoping in Anonymous Delegates in C#</a></font></h2><br /><div style="background: white none repeat scroll 0% 50%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"><pre style="margin: 0px;"><span style="color: blue;">public</span><span style="color: blue;">void</span> AddScript(<span style="color: rgb(43, 145, 175);">ScriptItem</span> script)</pre><pre style="margin: 0px;">{</pre><pre style="margin: 0px;">    <span style="color: rgb(43, 145, 175);">ScriptItem</span> match
= <span style="color: blue;">null</span>;</pre><pre style="margin: 0px;"> </pre><pre style="margin: 0px;">    <span style="color: green;">//
*** Grab just the path</span></pre><pre style="margin: 0px;">    <span style="color: blue;">if</span> (!<span style="color: blue;">string</span>.IsNullOrEmpty(script.Src))</pre><pre style="margin: 0px;">    {</pre><pre style="margin: 0px;">        script.FileId = <span style="color: rgb(43, 145, 175);">Path</span>.GetFileName(script.Src).ToLower();</pre><pre style="margin: 0px;"> </pre><pre style="margin: 0px;">        match = <span style="color: blue;">this</span>.InternalScripts.Find(</pre><pre style="margin: 0px;">            <span style="color: blue;">delegate</span>(<span style="color: rgb(43, 145, 175);">ScriptItem</span> item)</pre><pre style="margin: 0px;">            {</pre><pre style="margin: 0px;"><span style="color: rgb(43, 145, 175);"> ScriptRenderModes</span> mode
= <span style="color: blue;">this</span>.RenderMode; <font color="#808000">// demonstrate
this pointer</font></pre><pre style="margin: 0px;">               <span style="color: blue;">return</span> (item.FileId
== <font color="#ff1493"><strong>script.FileId</strong></font>);</pre><pre style="margin: 0px;">            });</pre><pre style="margin: 0px;">    }</pre><pre style="margin: 0px;"> </pre><pre style="margin: 0px;">    <span style="color: blue;">if</span> (match
== <span style="color: blue;">null</span>)                </pre><pre style="margin: 0px;">        <span style="color: blue;">this</span>.InternalScripts.Add(script);</pre><pre style="margin: 0px;">    <span style="color: blue;">else</span></pre><pre style="margin: 0px;">        match = script;</pre><pre style="margin: 0px;">} </pre></div><br /><p></p><img width="0" height="0" src="http://blog.stoneskins.com/aggbug.ashx?id=21920d6c-89dc-4853-93b8-0f89ac3dde52" /></body>
      <title>Sort List with anonymous Delegate  </title>
      <guid isPermaLink="false">http://blog.stoneskins.com/PermaLink,guid,21920d6c-89dc-4853-93b8-0f89ac3dde52.aspx</guid>
      <link>http://blog.stoneskins.com/2008/08/26/SortListWithAnonymousDelegate.aspx</link>
      <pubDate>Tue, 26 Aug 2008 02:41:23 GMT</pubDate>
      <description>Sometime I need resort the ArrayList or List&amp;lt;T&amp;gt; in my code. I am too lazy to write a piece of code to implement IComparer. When I search through google, I found there is a very elegant way to do the sorting:&lt;br&gt;
&lt;pre&gt;[code]&lt;br&gt;
peopleList.Sort(&lt;br&gt;
delegate(Person p1, Person p2) 
&lt;br&gt;
{ 
&lt;br&gt;
return p1.name.CompareTo(p2.name); 
&lt;br&gt;
}&lt;br&gt;
);&lt;br&gt;
&lt;br&gt;
peopleList.ForEach(delegate(Person p) { Console.WriteLine(String.Format("{0} {1}",
p.age, p.name)); });&lt;br&gt;
&lt;br&gt;
[/code]&lt;br&gt;
&lt;/pre&gt;I have used code like this many times, but actually I didn't really understand
why code can be wrote like this. 
&lt;br&gt;
Those are some different way to sorting in different version of .net frameworks,&lt;br&gt;
and those articles helping me to understand the sorting code better.&lt;br&gt;
&lt;br&gt;
Thanks to &lt;a class="bigusername" href="http://bbs.et8.net/bbs/member.php?u=25399"&gt;happy九拍&lt;/a&gt;
&lt;br&gt;
&lt;div id="post_message_9805999" style="overflow-x: hidden;"&gt;如果不用匿名方法，我们1.1里就的这么写&lt;br&gt;
&lt;br&gt;
&lt;div style="margin: 5px 20px 20px;"&gt;
&lt;div class="smallfont" style="margin-bottom: 2px;"&gt;代码:
&lt;/div&gt;
&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 5px; overflow: auto; width: 640px; height: 82px; text-align: left;"&gt;static int Compare(Person p1, Person p2)&lt;br&gt;
{&lt;br&gt;
return p1.name.CompareTo(p2.name);&lt;br&gt;
}&lt;/pre&gt;
&lt;/div&gt;
然后&lt;br&gt;
&lt;div style="margin: 5px 20px 20px;"&gt;
&lt;div class="smallfont" style="margin-bottom: 2px;"&gt;代码:
&lt;/div&gt;
&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 5px; overflow: auto; width: 640px; height: 34px; text-align: left;"&gt;people.Sort(new Comparison&amp;lt;Preson&amp;gt;(Compare));&lt;/pre&gt;
&lt;/div&gt;
你的问题解决了，在C#3.0里，我们不再需要匿名方法了，直接lambda咯&lt;br&gt;
&lt;div style="margin: 5px 20px 20px;"&gt;
&lt;div class="smallfont" style="margin-bottom: 2px;"&gt;代码:
&lt;/div&gt;
&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 5px; overflow: auto; width: 640px; height: 34px; text-align: left;"&gt;people.Sort((p1, p2) =&amp;gt; p1.name.CompareTo(p2.name));&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
Thanks to &lt;a class="bigusername" href="http://bbs.et8.net/bbs/member.php?u=69316"&gt;Shadal&lt;/a&gt;:&lt;br&gt;
2.0可以这样写&lt;br&gt;
static int Compare(Person p1, Person p2)&lt;br&gt;
{&lt;br&gt;
return p1.name.CompareTo(p2.name);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
people.Sort(Compare);&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
An userful article: 
&lt;br&gt;
&lt;h2&gt;&lt;font size="2"&gt;&lt;a style="text-decoration: none;" href="http://www.west-wind.com/Weblog/posts/330694.aspx"&gt;Variable
Scoping in Anonymous Delegates in C#&lt;/a&gt;&lt;/font&gt;
&lt;/h2&gt;
&lt;br&gt;
&lt;div style="background: white none repeat scroll 0% 50%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: courier new;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; AddScript(&lt;span style="color: rgb(43, 145, 175);"&gt;ScriptItem&lt;/span&gt; script)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;ScriptItem&lt;/span&gt; match
= &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//
*** Grab just the path&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(script.Src))&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script.FileId = &lt;span style="color: rgb(43, 145, 175);"&gt;Path&lt;/span&gt;.GetFileName(script.Src).ToLower();&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; match = &lt;span style="color: blue;"&gt;this&lt;/span&gt;.InternalScripts.Find(&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;ScriptItem&lt;/span&gt; item)&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt; ScriptRenderModes&lt;/span&gt; mode
= &lt;span style="color: blue;"&gt;this&lt;/span&gt;.RenderMode; &lt;font color="#808000"&gt;// demonstrate
this pointer&lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; (item.FileId
== &lt;font color="#ff1493"&gt;&lt;strong&gt;script.FileId&lt;/strong&gt;&lt;/font&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (match
== &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.InternalScripts.Add(script);&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; match = script;&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.stoneskins.com/aggbug.ashx?id=21920d6c-89dc-4853-93b8-0f89ac3dde52" /&gt;</description>
      <comments>http://blog.stoneskins.com/CommentView,guid,21920d6c-89dc-4853-93b8-0f89ac3dde52.aspx</comments>
      <category>C#</category>
      <category>LINQ and C# 3.0</category>
    </item>
    <item>
      <trackback:ping>http://blog.stoneskins.com/Trackback.aspx?guid=2d8cebf7-9b5a-40b3-9974-5d9b2e30580d</trackback:ping>
      <pingback:server>http://blog.stoneskins.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.stoneskins.com/PermaLink,guid,2d8cebf7-9b5a-40b3-9974-5d9b2e30580d.aspx</pingback:target>
      <dc:creator>stoneskin</dc:creator>
      <wfw:comment>http://blog.stoneskins.com/CommentView,guid,2d8cebf7-9b5a-40b3-9974-5d9b2e30580d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.stoneskins.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2d8cebf7-9b5a-40b3-9974-5d9b2e30580d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Introducing LINQ
</p>
        <font face="Arial" size="2">
          <p>
          </p>
        </font>
        <a href="http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx">
          <u>
            <font face="Arial" color="#0000ff" size="2">http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx
</font>
          </u>
        </a>
        <p>
C# 3.0: An Introduction
</p>
        <font face="Arial" size="2">
          <p>
          </p>
        </font>
        <a href="http://dotnetslackers.com/articles/csharp/Csharp_3_0_An_Introduction.aspx">
          <u>
            <font face="Arial" color="#0000ff" size="2">http://dotnetslackers.com/articles/csharp/Csharp_3_0_An_Introduction.aspx
</font>
          </u>
        </a>
        <p>
101 LINQ Samples
</p>
        <font face="Arial" size="2">
          <p>
          </p>
        </font>
        <a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx">
          <u>
            <font face="Arial" color="#0000ff" size="2">http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx
</font>
          </u>
        </a>
        <img width="0" height="0" src="http://blog.stoneskins.com/aggbug.ashx?id=2d8cebf7-9b5a-40b3-9974-5d9b2e30580d" />
      </body>
      <title>LINQ &amp; C# 3.0</title>
      <guid isPermaLink="false">http://blog.stoneskins.com/PermaLink,guid,2d8cebf7-9b5a-40b3-9974-5d9b2e30580d.aspx</guid>
      <link>http://blog.stoneskins.com/2008/03/31/LINQC30.aspx</link>
      <pubDate>Mon, 31 Mar 2008 21:18:43 GMT</pubDate>
      <description>&lt;p&gt;
Introducing LINQ
&lt;/p&gt;
&lt;font face=Arial size=2&gt; 
&lt;p&gt;
&lt;/font&gt;&lt;a href="http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx"&gt;&lt;u&gt;&lt;font face=Arial color=#0000ff size=2&gt;http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx
&lt;/u&gt;&gt;&lt;/a&gt;&gt;
&lt;p&gt;
C# 3.0: An Introduction
&lt;/p&gt;
&lt;font face=Arial size=2&gt; 
&lt;p&gt;
&lt;/font&gt;&lt;a href="http://dotnetslackers.com/articles/csharp/Csharp_3_0_An_Introduction.aspx"&gt;&lt;u&gt;&lt;font face=Arial color=#0000ff size=2&gt;http://dotnetslackers.com/articles/csharp/Csharp_3_0_An_Introduction.aspx
&lt;/u&gt;&gt;&lt;/a&gt;&gt;
&lt;p&gt;
101 LINQ Samples
&lt;/p&gt;
&lt;font face=Arial size=2&gt; 
&lt;p&gt;
&lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx"&gt;&lt;u&gt;&lt;font face=Arial color=#0000ff size=2&gt;http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx
&lt;/u&gt;&gt;&lt;/a&gt;&gt;
&lt;img width="0" height="0" src="http://blog.stoneskins.com/aggbug.ashx?id=2d8cebf7-9b5a-40b3-9974-5d9b2e30580d" /&gt;</description>
      <comments>http://blog.stoneskins.com/CommentView,guid,2d8cebf7-9b5a-40b3-9974-5d9b2e30580d.aspx</comments>
      <category>LINQ and C# 3.0</category>
    </item>
  </channel>
</rss>