<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Damon Wilder Carr</title><link>http://blogs.windowsclient.net/damonwildercarr/default.aspx</link><description>new [] { Smooth Streaming HD Video, RIA, Broadband TV-Cable Convergence, ORM, Silverlight 3.0,  Deep Zoom, Linq};</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20423.869)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView" type="application/rss+xml" /><item><title>Silverlight 3 art. mocking bad ‘highbrow’ art using the Silverlight 3 beta</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/o68wm7tO6lE/silverlight-3-art-mocking-bad-highbrow-art-using-the-silverlight-3-beta.aspx</link><pubDate>Mon, 18 May 2009 00:33:40 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:170925</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For something completely different. Adventures in artistic expression. Or how to evoke a lot of grad school art projects in the mocking way.. Or bad independent cinema.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Anyhow check it out here:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="mockery is the sincerest form of what?" href="http://www.domaindotnet.com/life/"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="silverligh3art" border="0" alt="silverligh3art" src="http://windowsclient.net/blogs/damonwildercarr/silverligh3art_11B8D6BD.png" width="400" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fwindowsclient.net%2fblogs%2fdamonwildercarr%2farchive%2f2009%2f05%2f17%2fsilverlight-3-art-mocking-bad-highbrow-art-using-the-silverlight-3-beta.aspx&amp;amp;title=Silverlight+3+art.+mocking+bad+%e2%80%98highbrow%e2%80%99+art+using+the+Silverlight+3+beta"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=170925" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=o68wm7tO6lE:kZy8n7y5ZME:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=o68wm7tO6lE:kZy8n7y5ZME:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=o68wm7tO6lE:kZy8n7y5ZME:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=o68wm7tO6lE:kZy8n7y5ZME:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=o68wm7tO6lE:kZy8n7y5ZME:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=o68wm7tO6lE:kZy8n7y5ZME:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=o68wm7tO6lE:kZy8n7y5ZME:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=o68wm7tO6lE:kZy8n7y5ZME:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=o68wm7tO6lE:kZy8n7y5ZME:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/o68wm7tO6lE" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2009/05/17/silverlight-3-art-mocking-bad-highbrow-art-using-the-silverlight-3-beta.aspx</feedburner:origLink></item><item><title>Silverlight 3 Beta Really Does Play Adobe Video Content</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/ijOiwvBWls0/silverlight-3-beta-really-does-play-adobe-video-content.aspx</link><pubDate>Mon, 06 Apr 2009 05:39:08 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:127324</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.domaindotnet.com/silver3adobevideo.htm" target="_blank"&gt;&lt;img style="border-bottom:black 5px solid;border-left:black 5px solid;margin:5px;display:inline;background:black 0px 0px;border-top:black 5px solid;border-right:black 5px solid;" class="  " alt="" align="right" src="http://www.domaindotnet.com/adobe_logo.gif" width="90" height="91" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Things just got vastly more interesting on the &lt;a href="http://en.wikipedia.org/wiki/Ria_" target="_blank"&gt;RIA &lt;/a&gt;front, especially for HD Video and Digital Media in general. Why?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="Silverlight 3 Adobe Video Media Player" href="http://www.domaindotnet.com/silver3adobevideo.htm" target="_blank"&gt;&lt;img style="display:inline;" alt="" src="http://www.domaindotnet.com/silverlight3adobevid.png" width="442" height="293" /&gt;&lt;/a&gt;[/caption]&lt;/p&gt;  &lt;p&gt;Adobe has no reason to ignore &lt;a href="http://en.wikipedia.org/wiki/Silverlight_" target="_blank"&gt;Silverlight &lt;/a&gt;now…They do that at their own peril and eventual harm.&lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Silverlight 3 beta is out. &lt;/strong&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;strong&gt;     &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;Hardware Accelerated      &lt;br /&gt;Silverlight 3 Adobe Video       &lt;br /&gt;Media Player&lt;/strong&gt;&lt;/h3&gt;  &lt;h3&gt;Oh and also Windows Media including the    &lt;br /&gt;latest Smooth Streaming from IIS 7.&lt;/h3&gt;  &lt;p&gt;I’ve become a kind of hyper-specialized developer, the kind I used to say were outdated due to the need for ‘everyone to know everything’ as teams are so much smaller..&lt;/p&gt;  &lt;p&gt;What I mean is all I do is Silverlight, and even more specifically the latest bleeding edge crazy HD video synced to Deep Zoom back to live broadcasts… I was wrong about generalization. Instead we went the other way, with an insane positive bias on those of us making pretty things on the screen (the economy makes other ‘cannot see’ work perhaps much less able to secure funding….&lt;/p&gt;  &lt;p&gt;Anyway I dove in with Silverlight 3.. Big time. Check out this Adobe video player in Silverlight (the first I have ever seen and believe me I looked hard)…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b73a0b4-ab03-4eb6-8d91-005e51fe20d9" class="wlWriterSmartContent"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/adobe" rel="tag"&gt;adobe&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/f4v" rel="tag"&gt;f4v&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/flash+video" rel="tag"&gt;flash video&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Flex" rel="tag"&gt;Flex&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/flv" rel="tag"&gt;flv&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/RIA" rel="tag"&gt;RIA&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/SilverLight" rel="tag"&gt;SilverLight&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/silverlight+3" rel="tag"&gt;silverlight 3&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/silverlight+3+beta" rel="tag"&gt;silverlight 3 beta&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/silverlight+adobe" rel="tag"&gt;silverlight adobe&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Video" rel="tag"&gt;Video&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7011ac63-84fa-4317-a7b5-0c6e00e87398" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/adobe" rel="tag"&gt;adobe&lt;/a&gt;,&lt;a href="http://technorati.com/tags/f4v" rel="tag"&gt;f4v&lt;/a&gt;,&lt;a href="http://technorati.com/tags/flash+video" rel="tag"&gt;flash video&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Flex" rel="tag"&gt;Flex&lt;/a&gt;,&lt;a href="http://technorati.com/tags/flv" rel="tag"&gt;flv&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RIA" rel="tag"&gt;RIA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SilverLight" rel="tag"&gt;SilverLight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight+3" rel="tag"&gt;silverlight 3&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight+3+beta" rel="tag"&gt;silverlight 3 beta&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight+adobe" rel="tag"&gt;silverlight adobe&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Video" rel="tag"&gt;Video&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:right;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fwindowsclient.net%2fblogs%2fdamonwildercarr%2farchive%2f2009%2f04%2f06%2fsilverlight-3-beta-really-does-play-adobe-video-content.aspx&amp;amp;title=Silverlight+3+Beta+Really+Does+Play+Adobe+Video+Content"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=127324" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ijOiwvBWls0:Ofti3l1QFbQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ijOiwvBWls0:Ofti3l1QFbQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=ijOiwvBWls0:Ofti3l1QFbQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ijOiwvBWls0:Ofti3l1QFbQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ijOiwvBWls0:Ofti3l1QFbQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=ijOiwvBWls0:Ofti3l1QFbQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ijOiwvBWls0:Ofti3l1QFbQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=ijOiwvBWls0:Ofti3l1QFbQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ijOiwvBWls0:Ofti3l1QFbQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/ijOiwvBWls0" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight+3+Video/default.aspx">Silverlight 3 Video</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Smooth+Streaming/default.aspx">Smooth Streaming</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Adobe+Video+in+Silverlight+3/default.aspx">Adobe Video in Silverlight 3</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/H.264/default.aspx">H.264</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/RIA/default.aspx">RIA</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2009/04/06/silverlight-3-beta-really-does-play-adobe-video-content.aspx</feedburner:origLink></item><item><title>Advanced Bidirectional Silverlight 2.0 to ASP.NET Integration – Part 1</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/e-AljRWIwcI/advanced-bidirectional-silverlight-2-0-to-asp-net-integration-part-1.aspx</link><pubDate>Tue, 23 Dec 2008 07:31:12 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:93711</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f12%2f23%2fsilverlight_aspnet_bidirectional_integration-2%2f"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f12%2f23%2fsilverlight_aspnet_bidirectional_integration-2%2f" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f12%2f23%2fsilverlight_aspnet_bidirectional_integration-2%2f&amp;amp;title=Advanced+Bidirectional+Silverlight+2.0+to+ASP.NET+Integration+%e2%80%93+Part+1"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Digg This" border="0" alt="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsclient.net/blogs/damonwildercarr/Silverlight_Logo_2_0D4F9FF5.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Silverlight_Logo_2" border="0" alt="Silverlight_Logo_2" src="http://windowsclient.net/blogs/damonwildercarr/Silverlight_Logo_2_thumb_69B892FE.png" width="244" height="82" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is the first post covering techniques for both sending data into your Silverlight environment from ASP.NET as well as getting data out of Silverlight without resorting to a lot of new elements in your architecture. The goal is to use what you already have with the least fuss.&lt;/p&gt;  &lt;p&gt;You may think you need to resort to ‘pushing’ all data from Silverlight into say a service using WCF but that is not the case in many scenarios.&lt;/p&gt;  &lt;p&gt;For example, you may have activity which the user creates inside Silverlight 2.0 that results in visual elements you want to send out to ASP.NET for persistence in your ORM environment (where Silverlight has no involvement).&lt;/p&gt;  &lt;h2 style="width:380px;height:32px;"&gt;From ASP.NET to Silverlight 2.0&lt;/h2&gt;  &lt;p&gt;First, let’s quickly review the easiest way to pass information into your Silverlight control.&lt;/p&gt;  &lt;h3&gt;InitParamaters&lt;/h3&gt;  &lt;p&gt;Here is the on-line help:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If parameters are included, they are typically in comma-delimited pairs and are available as a dictionary object in a Silverlight 2 startup event. &lt;strong&gt;These parameters are not used in a Silverlight 1.0-based application.&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;If an action on an .aspx page causes a postback to occur, the Silverlight plug-in will start again with its content specified in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.silverlightcontrols.silverlight.source(VS.95).aspx"&gt;Source&lt;/a&gt; property. The current value of the InitParameters property is sent to the Silverlight plug-in. &lt;strong&gt;This enables you to change the InitParameters property before a postback occurs.&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;The Silverlight 2 application specified in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.silverlightcontrols.silverlight.source(VS.95).aspx"&gt;Source&lt;/a&gt; property can access the initialization parameters specified in the InitParameters property in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.startupeventargs(VS.95).aspx"&gt;StartupEventArgs&lt;/a&gt; parameter of the Silverlight Application &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.application.startup(VS.95).aspx"&gt;Startup&lt;/a&gt; event.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We will walk through an entire example of this, including some content that will make sense in how we can move data back out of Silverlight 2.0 to ASP.NET.&lt;/p&gt;  &lt;h3&gt;Code for this Scenario&lt;/h3&gt;  &lt;p&gt;We will be using a web UserControl (.ascx) as our control in this example, because as you will see, we need more than just the Silverlight control to make this work.&lt;/p&gt;  &lt;h4&gt;ASCX Host&lt;/h4&gt;  &lt;div&gt;   &lt;pre class="code"&gt;&lt;span style="background:#151515;color:#f35c47;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;@ &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Control &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Language&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;C#&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;true&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;CodeBehind&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;SilverlightInt.ascx.cs&amp;quot;
  &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Inherits&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;SilverlightInt&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f35c47;"&gt;%&amp;gt;
&amp;lt;%&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;@ &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Register &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Assembly&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;System.Web.Silverlight&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Namespace&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;System.Web.UI.SilverlightControls&amp;quot;
    &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;TagPrefix&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;asp&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f35c47;"&gt;%&amp;gt;
&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Silverlight &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;ID&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;SilverlightView&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Source&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;~/ClientBin/AspNetIntegration.xap&amp;quot;
    &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;MinimumVersion&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;2.0.31005.0&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;TextBox &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;ID&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;SilverOutput&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot;   &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Style&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;display&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:#151515;color:#9cf5c0;"&gt;none&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;TextBox&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;&lt;/span&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4&gt;ASCX Code Behind&lt;/h4&gt;

&lt;pre class="code"&gt;&lt;span style="background:#151515;color:white;"&gt;    &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public partial class &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;SilverlightInt &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;UserControl
    &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;{
        [&lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;Browsable&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;true&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;)]
        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;InitialText { &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;get&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;; &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;set&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;; }

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;protected void &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;Page_Load(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;EventArgs &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;e)
        {
            SetSilverlightInitParamaters();
        }

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;void &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;SetSilverlightInitParamaters()
        {
            &lt;/span&gt;&lt;span style="background:#151515;color:#e388dd;"&gt;// Note: We need the client ID for later...
            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;InitParams = &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;Dictionary&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;String&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;, &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;String&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;gt;
                             {
                                 {
                                     &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;outputcontrol&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;,
                                    SilverOutput.ClientID
                                     },
                                 {
                                     &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;InitialText&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;,
                               InitialText ?? &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;Hello World&amp;quot;
                                     &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;}
                             };

            SilverlightView.InitParameters =                   InitParams.ToSilverlightInit();
        }
    }
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might notice the extension method ToSilverlightInit(). Here is the code:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#151515;color:white;"&gt; &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public static class &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;SilverlightIntegrationExtensions
    &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;{
        &lt;/span&gt;&lt;span style="background:#151515;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="background:#151515;color:green;"&gt;Parse the dictionary into Silverlight format
        &lt;/span&gt;&lt;span style="background:#151515;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:#151515;color:green;"&gt;for InitParams
        &lt;/span&gt;&lt;span style="background:#151515;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;target&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background:#151515;color:green;"&gt;The target.&lt;/span&gt;&lt;span style="background:#151515;color:gray;"&gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public static &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;ToSilverlightInit(                 &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;this &lt;/span&gt;&lt;span style="background:#151515;color:#9185fa;"&gt;IDictionary&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;String&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;, &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;String&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;gt; target)
        {
            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(target == &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;)
                &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;throw new &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;target&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;);

            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;stringBuffer = &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;();

            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;foreach&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;kvp &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;in &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;target)
            {
                &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(stringBuffer.Length &amp;gt; 0)
                    stringBuffer.Append(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;);

                &lt;/span&gt;&lt;span style="background:#151515;color:#e388dd;"&gt;// Eliminate case sensitivity
              &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;stringBuffer.Append(kvp.Key.ToLower() +                    &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;=&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;+ kvp.Value);

            }

            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;stringBuffer.ToString();

        }

    }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is hosted in a normal ASPX page as follows (surrounding detail omitted):&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:#151515;color:white;"&gt;  &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;form &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;id&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;form1&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;style&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;height&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:#151515;color:#9cf5c0;"&gt;100%&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;;&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;ScriptManager &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;ID&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;ScriptManager1&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;ScriptManager&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;div&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Image &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;Width&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;300px&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;ImageUrl&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Silverlight_Logo_2.png&amp;quot;
           &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;br &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;asp&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Literal &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;ID&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;sentText&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;br &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;hr &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;integrate&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;:&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;SilverlightInt &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;ID&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;SilverlightInt1&amp;quot;
           &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;runat&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;server&amp;quot;     &lt;/span&gt;&lt;span style="background:#151515;color:#f0ec4a;"&gt;InitialText&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;This is a Test&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;/&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;div&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;form&lt;/span&gt;&lt;span style="background:#151515;color:#f2f200;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Here is what it looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://windowsclient.net/blogs/damonwildercarr/image_72A8253D.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://windowsclient.net/blogs/damonwildercarr/image_thumb_2123C58F.png" width="435" height="593" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Silverlight Code for Initialization&lt;/h3&gt;

&lt;pre class="code"&gt;&lt;span style="background:#151515;color:white;"&gt; &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public partial class &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;App &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;Application
    &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;{
        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;App()
        {
            Startup += Application_Startup;
            UnhandledException += Application_UnhandledException;
            InitializeComponent();
        }

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;void &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;Application_Startup(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;StartupEventArgs &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;e)
        {
            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;PassedInArguments = e.InitParams;
            RootVisual = &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;SilverlightView&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(PassedInArguments);
        }
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interesting parts are that we are accessing the InitParams off the Startup’s ‘e’ object. This is a Dictionary&amp;lt;String,String&amp;gt; which is what prompted the ASP.NET design.&lt;/p&gt;

&lt;p&gt;Also, we do not use a paramaterless constructor on the initial RootVisual. Instead this is the code:&lt;/p&gt;

&lt;h4&gt;Silverlight View&lt;/h4&gt;

&lt;pre class="code"&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;UserControl &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;x:Class=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;AspNetIntegration.SilverlightView&amp;quot;
    &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;xmlns=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;xmlns:x=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;

    &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;Grid &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;HorizontalAlignment=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Left&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;VerticalAlignment=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Top&amp;quot;
       &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;x:Name=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;LayoutRoot&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Background=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Gray&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;RowDefinition &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Height=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;30&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;/&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;RowDefinition &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Height=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;30&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;ColumnDefinition &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Width=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;150&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;

        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;TextBlock &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;HorizontalAlignment=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Center&amp;quot;            &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;VerticalAlignment=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Center&amp;quot;
             &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Grid.Row=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;0&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Text=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Inside Silverlight&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;/&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;TextBox &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;LostFocus=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;SendResultBackToAspNet&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;Grid.Row=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;1&amp;quot;
          &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;BorderThickness=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;2&amp;quot; &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;BorderBrush=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;Black&amp;quot;                 &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;x:Name=&lt;/span&gt;&lt;span style="background:#151515;color:#a8a8ff;"&gt;&amp;quot;initialText&amp;quot;  &lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;/&amp;gt;

    &amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;Grid&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;

&amp;lt;/&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;UserControl&lt;/span&gt;&lt;span style="background:#151515;color:#f4503e;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Code Behind&lt;/h4&gt;

&lt;pre class="code"&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public partial class &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;SilverlightView &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;UserControl
    &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;{
        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;readonly &lt;/span&gt;&lt;span style="background:#151515;color:#9185fa;"&gt;IDictionary&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;string&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;, &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;string&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;gt; _initParamaters;
        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;string &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;_initialText =                &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;Nothing was Passed In - initialtext was empty&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;;

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;SilverlightView(              I&lt;/span&gt;&lt;span style="background:#151515;color:#9185fa;"&gt;Dictionary&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;string&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;, &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;string&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;&amp;gt; passedInArguments)
        {
            _initParamaters = passedInArguments;
            InitializeComponent();
            Loaded += OnLoaded;
        }

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;void &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;OnLoaded(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;RoutedEventArgs &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;e)
        {
            SetInitialText();
        }

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;void &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;SetInitialText() {

            &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;(_initParamaters.ContainsKey(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;initialtext&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;))
            {
                _initialText = _initParamaters[&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;&amp;quot;initialtext&amp;quot;&lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;];
            }

            initialText.Text = _initialText;
        }

        &lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;void &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;SendResultBackToAspNet(&lt;/span&gt;&lt;span style="background:#151515;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:#151515;color:#2b91af;"&gt;RoutedEventArgs &lt;/span&gt;&lt;span style="background:#151515;color:white;"&gt;e)
        {

        }
    }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Notice the ‘SendResultBackToAspNet’ is empty.. That is coming next and is the tricky part.&lt;/p&gt;

&lt;h3&gt;Coming Next&lt;/h3&gt;

&lt;p&gt;The code will all be available for download and the much more interesting aspect of sending data back the other way will be presented.&lt;/p&gt;

&lt;p&gt;Damon&lt;/p&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:deef5f6c-9e8f-45ec-beea-78b28996210d" class="wlWriterSmartContent"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Bidirectional" rel="tag"&gt;Bidirectional&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Integration" rel="tag"&gt;Integration&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/InitParameters" rel="tag"&gt;InitParameters&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/InitParams" rel="tag"&gt;InitParams&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/HtmlBridge" rel="tag"&gt;HtmlBridge&lt;/a&gt;&lt;/div&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:eeae14fb-c4b4-4ef0-a063-4007fc457a38" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Silverlight" rel="tag"&gt;Silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Bidirectional" rel="tag"&gt;Bidirectional&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Integration" rel="tag"&gt;Integration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/InitParameters" rel="tag"&gt;InitParameters&lt;/a&gt;,&lt;a href="http://technorati.com/tags/InitParams" rel="tag"&gt;InitParams&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HtmlBridge" rel="tag"&gt;HtmlBridge&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fwindowsclient.net%2fblogs%2fdamonwildercarr%2farchive%2f2008%2f12%2f23%2fadvanced-bidirectional-silverlight-2-0-to-asp-net-integration-part-1.aspx&amp;amp;title=Advanced+Bidirectional+Silverlight+2.0+to+ASP.NET+Integration+%e2%80%93+Part+1"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=93711" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=e-AljRWIwcI:Uad-SEaRxk0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=e-AljRWIwcI:Uad-SEaRxk0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=e-AljRWIwcI:Uad-SEaRxk0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=e-AljRWIwcI:Uad-SEaRxk0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=e-AljRWIwcI:Uad-SEaRxk0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=e-AljRWIwcI:Uad-SEaRxk0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=e-AljRWIwcI:Uad-SEaRxk0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=e-AljRWIwcI:Uad-SEaRxk0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=e-AljRWIwcI:Uad-SEaRxk0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/e-AljRWIwcI" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Integration/default.aspx">Integration</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/ASP.NET/default.aspx">ASP.NET</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/12/23/advanced-bidirectional-silverlight-2-0-to-asp-net-integration-part-1.aspx</feedburner:origLink></item><item><title>C# Delegate Shortcut – No more null testing on events for subscribers</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/ID_ZCBxr6YM/c-delegate-shortcut-no-more-null-testing-on-events-for-subscribers.aspx</link><pubDate>Fri, 28 Nov 2008 16:27:15 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:87350</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f11%2f27%2fvery_nice_c_sharp_shortcut%2f"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f11%2f27%2fvery_nice_c_sharp_shortcut%2f" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is fairly well known but I realized I hadn’t seen it blogged about (sorry if already covered).&lt;/p&gt;  &lt;p&gt;Your likely used to doing this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;  &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public event &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;EventHandler&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;AnimationImageEventArgs&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt; AnimationImageClicked;

       &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt; &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;OnClick(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;AnimationImageEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;e)
     &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;   {
        &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(AnimationImageClicked != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;)
      &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;          AnimationImageClicked(sender, e);
     &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;   }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No need for that null check. I for one tend to forget them in the bowels of my teams code. What is better then eliminating the issue!&lt;/p&gt;

&lt;p&gt;This is a way to ‘always have one subscriber’ which you can consider a sort of &lt;a href="http://en.wikipedia.org/wiki/Null_Object_pattern"&gt;‘null object’ pattern&lt;/a&gt; implementation for delegates. Checking for null just sucks and I love this kind of ubiquitous removal of it.&lt;/p&gt;

&lt;p&gt;The first person I saw doing this was &lt;a href="http://www.oreillynet.com/pub/au/741"&gt;Juval Lowy&lt;/a&gt;, the master craftsman for basically all things .NET but known recently for utter mastery of WCF in his books and at his firm &lt;a href="http://www.idesign.net/idesign/"&gt;IDesign&lt;/a&gt;. Highly recommend all his writing, code samples and thoughts.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt; &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public event &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;EventHandler&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;AnimationImageEventArgs&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt; AnimationImageClicked = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;delegate &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{ };

        &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;OnClick(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;AnimationImageEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;e)
      &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;  {
     &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;           AnimationImageClicked(sender, e);
     &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;  }

&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Damon&lt;/p&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=87350" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ID_ZCBxr6YM:2PPpSB-OvNU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ID_ZCBxr6YM:2PPpSB-OvNU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=ID_ZCBxr6YM:2PPpSB-OvNU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ID_ZCBxr6YM:2PPpSB-OvNU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ID_ZCBxr6YM:2PPpSB-OvNU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=ID_ZCBxr6YM:2PPpSB-OvNU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ID_ZCBxr6YM:2PPpSB-OvNU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=ID_ZCBxr6YM:2PPpSB-OvNU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=ID_ZCBxr6YM:2PPpSB-OvNU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/ID_ZCBxr6YM" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/11/28/c-delegate-shortcut-no-more-null-testing-on-events-for-subscribers.aspx</feedburner:origLink></item><item><title>Deep Zoom in 3D? See it here</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/vAr-cbxKPSo/released-silverlight-3d-for-sharepoint-moss-2007-try-it-here-now.aspx</link><pubDate>Thu, 20 Nov 2008 04:17:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:83668</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Long story short, this is an effort to bring &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Rich_Internet_application"&gt;RIA &lt;/a&gt;to the &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Sharepoint_"&gt;SharePoint &lt;/a&gt;world.&lt;/p&gt;  &lt;p&gt;But not just RIA style &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Usability"&gt;usability&lt;/a&gt;, I believe we pushed the envelope even further by incorporating not only &lt;a target="_blank" href="http://en.wikipedia.org/wiki/DeepZoom"&gt;DeepZoom (SeaDragon) &lt;/a&gt;for ‘zoom in to the pixel’ resolution, but the 3D extensions not present by default&lt;/p&gt;  &lt;p align="right"&gt;(you have the essentials but only the amazingly talented people behind the &lt;a target="_blank" href="http://memorabilia.hardrock.com/"&gt;Hard Rock Memorabilia&lt;/a&gt; site (vertigo) &lt;a target="_blank" href="http://www.vertigo.com/DeepZoom.aspx"&gt;have shown this style of combined zoom/3d&lt;/a&gt; that we have seen in any largely deployed sample).&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;click.me&lt;/strong&gt;&lt;/p&gt;  &lt;p style="text-align:center;"&gt;&lt;a href="http://www.domaindotnet.com/ClientBin/DeepZoom3D.html"&gt;&lt;img style="border-bottom:black 1px solid;border-left:black 1px solid;display:block;border-top:black 1px solid;border-right:black 1px solid;" class="aligncenter" title="SharepointZoom3d" border="0" alt="SharepointZoom3d" src="http://windowsclient.net/blogs/damonwildercarr/SharepointZoom3d_73D7809D.png" width="240" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click the image here to launch the &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Silverlight"&gt;Silverlight&lt;/a&gt; 2.0 cross-platform goodness.&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;NOTE: A prize goes to the first person to email us at: &lt;/strong&gt;&lt;a href="mailto:innovate@domaindotnet.com"&gt;&lt;strong&gt;innovate@domaindotnet.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; the exact number of seconds it would take to complete the ‘applying attributes’ to the .gif file (you need to see the demo to understand).&lt;/strong&gt;&lt;/h4&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b3d19bf-9da9-439e-8cba-ffcf6c6f54f9" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/deepzoom" rel="tag"&gt;deepzoom&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wcf" rel="tag"&gt;wcf&lt;/a&gt;,&lt;a href="http://technorati.com/tags/3D" rel="tag"&gt;3D&lt;/a&gt;,&lt;a href="http://technorati.com/tags/animation" rel="tag"&gt;animation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/taxonomy" rel="tag"&gt;taxonomy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WCF" rel="tag"&gt;WCF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/invention" rel="tag"&gt;invention&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;a title="Silverlight 3D DeepZoom Navigator" target="_blank" href="http://www.domaindotnet.com/ClientBin/DeepZoom3D.html"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:361263a2-257c-4554-b5e0-93c46a88fd08" class="wlWriterEditableSmartContent"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/deepzoom" rel="tag"&gt;deepzoom&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/wcf" rel="tag"&gt;wcf&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/3D" rel="tag"&gt;3D&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/animation" rel="tag"&gt;animation&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/taxonomy" rel="tag"&gt;taxonomy&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/WCF" rel="tag"&gt;WCF&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/invention" rel="tag"&gt;invention&lt;/a&gt;&lt;/div&gt;  &lt;h3&gt;Related Posts&lt;/h3&gt;  &lt;div class="wlw_related_posts"&gt;from tag &lt;a href="http://del.icio.us/damoncarr/deepzoom"&gt;deepzoom&lt;/a&gt;&lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.vertigo.com/deepzoom.aspx"&gt;Vertigo: DeepZoom&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;from tag &lt;a href="http://del.icio.us/damoncarr/wcf"&gt;wcf&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.ayende.com/Blog/archive/2007/06/12/WCF-Windsor-Integration.aspx"&gt;WCF Windsor Integration&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;from tag &lt;a href="http://del.icio.us/damoncarr/WCF"&gt;WCF&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://damon.agilefactor.com/2007/09/software-as-service-pattern-language.html"&gt;Software as a Service - A Pattern Language Approach&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;from tag &lt;a href="http://del.icio.us/damoncarr/silverlight"&gt;silverlight&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.vertigo.com/personal/willa/Blog/archive/2008/10/14/silverlight-2-birthday-widget-part-ii.aspx"&gt;Will’s Blog - Silverlight 2 Birthday Widget, Part II&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://silverlight.net/GetStarted/sl2rc0.aspx"&gt;The Official Microsoft Silverlight Site&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;from tag &lt;a href="http://del.icio.us/damoncarr/SOA"&gt;SOA&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.slideshare.net/domaindotnetteam/advanced-concepts-in-software-as-a-service-service-oriented-architecture-presentation/"&gt;Advanced Concepts in Software as a Service / Service Oriented Architecture&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://damon.agilefactor.com/2007/10/collision-of-software-project.html"&gt;The Collision of Software Project Management and Agile&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;from tag &lt;a href="http://del.icio.us/damoncarr/sharepoint"&gt;sharepoint&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/office/bb251754.aspx"&gt;Business Data Catalog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://sharepointrss.com/"&gt;SharePoint RSS Alpha&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/technet/windowsserver/sharepoint/wssapps/templates/default.mspx"&gt;Templates for SharePoint&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms948927.aspx"&gt;Creating a Web Part with Custom Properties&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sharepoint-tips.com/2007/05/sharepoint-designer-article-2-creating.html"&gt;SharePoint Creating XSLT DataView&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smartpart"&gt;SmartPart for SharePoint - Home&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb264593.aspx"&gt;Windows SharePoint Services 3.0&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;from tag &lt;a href="http://del.icio.us/damoncarr/Linq"&gt;Linq&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.windowsclient.net//speeddial/content/speeddial.xul"&gt;Speed Dial&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://cifactorybuild.stelligent.com/CI%20Factory/default.aspx?_action_ViewBuildReport=true&amp;amp;server=CI+Factory&amp;amp;project=CI+Factory&amp;amp;build=log20070923221806Lbuild.0.9.0.18.xml"&gt;CruiseControl.NET&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://pragprog.com/"&gt;The Pragmatic Bookshelf&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.streetmap.co.uk/newsearch.srf?mapp=newmap&amp;amp;searchp=newsearch&amp;amp;type=PostCode&amp;amp;name=%s"&gt;map&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="https://www.innerworkings.com/promotions/a5a8879b-fb5b-4f66-8182-a14fd63a3d73/msdn-code-gallery-silverlight-2-samples/register"&gt;Register - InnerWorkings&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://del.icio.us/damoncarr/Linq"&gt;(more..)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=83668" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=vAr-cbxKPSo:Qrm0ErSSBIY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=vAr-cbxKPSo:Qrm0ErSSBIY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=vAr-cbxKPSo:Qrm0ErSSBIY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=vAr-cbxKPSo:Qrm0ErSSBIY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=vAr-cbxKPSo:Qrm0ErSSBIY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=vAr-cbxKPSo:Qrm0ErSSBIY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=vAr-cbxKPSo:Qrm0ErSSBIY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=vAr-cbxKPSo:Qrm0ErSSBIY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=vAr-cbxKPSo:Qrm0ErSSBIY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/vAr-cbxKPSo" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/domain.dot.net/default.aspx">domain.dot.net</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight+SharePoint+3D/default.aspx">Silverlight SharePoint 3D</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/SharePoint+MOSS+2007/default.aspx">SharePoint MOSS 2007</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/11/19/released-silverlight-3d-for-sharepoint-moss-2007-try-it-here-now.aspx</feedburner:origLink></item><item><title>SharePoint MOSS 3D</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/waWMVO0AoW4/sharepoint-moss-3d-is-almost-ready-this-was-taken-this-morning.aspx</link><pubDate>Sun, 16 Nov 2008 07:15:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:82090</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p style="TEXT-ALIGN:center;"&gt;&lt;a title="Full perspective in 3D" href="http://www.domaindotnet.com/ClientBin/DeepZoom3D.html"&gt;&lt;img style="BORDER-BOTTOM:black 2px solid;BORDER-LEFT:black 2px solid;MARGIN:2px;DISPLAY:block;BORDER-TOP:black 2px solid;BORDER-RIGHT:black 2px solid;" class="size-full wp-image-1112 aligncenter" title="sharepoint3d" alt="a PowerPoint document in our breakthrough navigation and discovery technology" src="http://dcarr.wordpress.com/files/2008/11/sharepoint3d.png" width="430" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="vcard"&gt;&lt;span class="fn n"&gt;&lt;span class="given-name"&gt;Damon&lt;/span&gt; &lt;span class="additional-name"&gt;Wilder&lt;/span&gt; &lt;span class="given-family"&gt;Carr&lt;/span&gt; &lt;/span&gt;
&lt;div class="org"&gt;domain.dot.net team labs&lt;/div&gt;
&lt;div&gt;&lt;a class="email" href="mailto:damon@domaindotnet.com"&gt;damon@domaindotnet.com&lt;/a&gt;&lt;/div&gt;
&lt;div class="adr"&gt;
&lt;div class="tel"&gt;&lt;a class="htc"&gt;646.853.3504&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a class="url" href="http://www.domaindotnet.com/"&gt;http://www.domaindotnet.com&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=82090" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=waWMVO0AoW4:bWtyIz1tZ-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=waWMVO0AoW4:bWtyIz1tZ-s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=waWMVO0AoW4:bWtyIz1tZ-s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=waWMVO0AoW4:bWtyIz1tZ-s:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=waWMVO0AoW4:bWtyIz1tZ-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=waWMVO0AoW4:bWtyIz1tZ-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=waWMVO0AoW4:bWtyIz1tZ-s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=waWMVO0AoW4:bWtyIz1tZ-s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=waWMVO0AoW4:bWtyIz1tZ-s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/waWMVO0AoW4" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/domain.dot.net/default.aspx">domain.dot.net</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight+SharePoint+3D/default.aspx">Silverlight SharePoint 3D</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/SharePoint+MOSS+2007/default.aspx">SharePoint MOSS 2007</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/11/16/sharepoint-moss-3d-is-almost-ready-this-was-taken-this-morning.aspx</feedburner:origLink></item><item><title>Live Proof of Concept: Core Engine for Sharepoint Taxonomy Navigation with Silverlight &amp; WPF/XAML Deep Zoom in 3D</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/JYz6COL3bg0/live-proof-of-concept-core-engine-for-sharepoint-taxonomy-navigation-with-silverlight-amp-wpf-xaml-deep-zoom-in-3d.aspx</link><pubDate>Sun, 26 Oct 2008 00:58:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:75832</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;&lt;u&gt;&lt;a href="http://www.domaindotnet.com/sharepoint/domaindotnet.wpf.xbap"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.domaindotnet.com/Sharepoint/publish.htm"&gt;Click here to see it live&lt;/a&gt;&lt;/u&gt;&lt;/h3&gt;&lt;/blockquote&gt;&lt;u&gt;
&lt;blockquote&gt;
&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;b&gt;&lt;u&gt;&lt;font size="4"&gt;For the Video Version (above requires .NET 3.5 SP1 Client Subset at least) &lt;a href="http://www.domaindotnet.com/media/"&gt;click here&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;/u&gt;
&lt;blockquote&gt;
&lt;h3&gt;&amp;nbsp; &lt;a href="http://www.domaindotnet.com/sharepoint/domaindotnet.wpf.xbap"&gt;&lt;img style="BORDER-RIGHT-WIDTH:0px;WIDTH:506px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;HEIGHT:478px;BORDER-LEFT-WIDTH:0px;" title="image" border="0" alt="image" src="http://windowsclient.net/blogs/damonwildercarr/image_76995D35.png" width="702" height="564" /&gt;&lt;/a&gt; &lt;/h3&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This proof of concept gets us around a few hurdles we were struggling with to deliver a ‘Google Earth’ style view but into a ‘company as the earth’. In our opinion, you can navigate to almost any spot on the planet so why is it so hard to find documents? &lt;/p&gt;
&lt;p&gt;For those invested in document management, categorization and meta information addition (part of building the taxonomies) the piece we found missing was a ‘modern’ way to navigate, discover, filter, pattern match, etc. all that semi-structured data.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;FLOAT:none;PADDING-TOP:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a24b430e-bb28-4b7a-a183-639eb09ad2f0" class="wlWriterSmartContent"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/MOSS" rel="tag"&gt;MOSS&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Sharepoint+2007" rel="tag"&gt;Sharepoint 2007&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/office+2007" rel="tag"&gt;office 2007&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/office+xml" rel="tag"&gt;office xml&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/deep+zoom" rel="tag"&gt;deep zoom&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/taxonomy" rel="tag"&gt;taxonomy&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/tag+navigation" rel="tag"&gt;tag navigation&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/silverlight+2" rel="tag"&gt;silverlight 2&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/3D" rel="tag"&gt;3D&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="PADDING-BOTTOM:0px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;FLOAT:none;PADDING-TOP:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e1dd8e1f-ba60-4d49-8772-f7618d476eab" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MOSS" rel="tag"&gt;MOSS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Sharepoint+2007" rel="tag"&gt;Sharepoint 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/office+2007" rel="tag"&gt;office 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/office+xml" rel="tag"&gt;office xml&lt;/a&gt;,&lt;a href="http://technorati.com/tags/deep+zoom" rel="tag"&gt;deep zoom&lt;/a&gt;,&lt;a href="http://technorati.com/tags/taxonomy" rel="tag"&gt;taxonomy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tag+navigation" rel="tag"&gt;tag navigation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight+2" rel="tag"&gt;silverlight 2&lt;/a&gt;,&lt;a href="http://technorati.com/tags/3D" rel="tag"&gt;3D&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;PADDING-BOTTOM:4px;MARGIN:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;PADDING-TOP:4px;" class="wlWriterHeaderFooter"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fwindowsclient.net%2fblogs%2fdamonwildercarr%2farchive%2f2008%2f10%2f25%2flive-proof-of-concept-core-engine-for-sharepoint-taxonomy-navigation-with-silverlight-amp-wpf-xaml-deep-zoom-in-3d.aspx&amp;amp;title=Live+Proof+of+Concept%3a+Core+Engine+for+Sharepoint+Taxonomy+Navigation+with+Silverlight+%26+WPF%2fXAML+Deep+Zoom+in+3D"&gt;&lt;img style="BORDER-BOTTOM:0pt;BORDER-LEFT:0pt;BORDER-TOP:0pt;BORDER-RIGHT:0pt;" title="Digg This" border="0" alt="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=75832" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=JYz6COL3bg0:RLNhoRVGyGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=JYz6COL3bg0:RLNhoRVGyGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=JYz6COL3bg0:RLNhoRVGyGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=JYz6COL3bg0:RLNhoRVGyGk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=JYz6COL3bg0:RLNhoRVGyGk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=JYz6COL3bg0:RLNhoRVGyGk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=JYz6COL3bg0:RLNhoRVGyGk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=JYz6COL3bg0:RLNhoRVGyGk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=JYz6COL3bg0:RLNhoRVGyGk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/JYz6COL3bg0" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight+SharePoint+3D/default.aspx">Silverlight SharePoint 3D</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/SharePoint+MOSS+2007/default.aspx">SharePoint MOSS 2007</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Silverlight/default.aspx">Silverlight</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/10/25/live-proof-of-concept-core-engine-for-sharepoint-taxonomy-navigation-with-silverlight-amp-wpf-xaml-deep-zoom-in-3d.aspx</feedburner:origLink></item><item><title>Use JQuery. It’s Officially Supported Now!</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/zUdfs0r3oLE/use-jquery-it-s-officially-supported-now.aspx</link><pubDate>Fri, 03 Oct 2008 08:05:16 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:68425</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a title="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx" href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Jquery_"&gt;jQuery &lt;/a&gt;intellisense annotation support will be available as a free web-download in a few weeks (and will work great with VS 2008 SP1 and the free Visual Web Developer 2008 Express SP1).&amp;#160; The new ASP.NET MVC download will also distribute it, and add the jQuery library by default to all new projects.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We will also extend Microsoft product support to jQuery beginning later this year, which will enable developers and enterprises to call and open jQuery support cases 24x7 with Microsoft PSS.&lt;/p&gt;  &lt;p&gt;Going forward we&amp;#39;ll use &lt;strong&gt;jQuery as one of the libraries used to implement higher-level controls in the ASP.NET AJAX Control Toolkit,&lt;/strong&gt; as well as to implement new Ajax server-side helper methods for ASP.NET MVC.&amp;#160; New features we add to ASP.NET AJAX (like the new &lt;a href="http://weblogs.asp.net/bleroy/archive/2008/09/16/javascript-and-client-templates-on-hanselminutes.aspx"&gt;client&lt;/a&gt; &lt;a href="http://weblogs.asp.net/bleroy/archive/2008/07/30/using-client-templates-part-1.aspx"&gt;template&lt;/a&gt; &lt;a href="http://weblogs.asp.net/bleroy/archive/2008/09/02/using-client-templates-part-2-live-bindings.aspx"&gt;support&lt;/a&gt;) will be designed to integrate nicely with jQuery as well.&amp;#160; &lt;/p&gt;  &lt;p&gt;We also plan to contribute tests, bug fixes, and patches back to the jQuery open source project.&amp;#160; These will all go through the standard jQuery patch review process.&lt;/p&gt;  &lt;p&gt;Impressed am I.&lt;/p&gt;  &lt;hr /&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e3ac2e99-238d-4bd6-88aa-cda1864168ad" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/JQuery" rel="tag"&gt;JQuery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET+Ajax" rel="tag"&gt;ASP.NET Ajax&lt;/a&gt;&lt;/div&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:12d78645-39cf-488a-9f9a-8fdcdec17693" class="wlWriterSmartContent"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/JQuery" rel="tag"&gt;JQuery&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/ASP.NET+Ajax" rel="tag"&gt;ASP.NET Ajax&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fwindowsclient.net%2fblogs%2fdamonwildercarr%2farchive%2f2008%2f10%2f03%2fuse-jquery-it-s-officially-supported-now.aspx&amp;amp;title=Use+JQuery.+It%e2%80%99s+Officially+Supported+Now!"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=68425" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=zUdfs0r3oLE:-b5s8f8mvjo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=zUdfs0r3oLE:-b5s8f8mvjo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=zUdfs0r3oLE:-b5s8f8mvjo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=zUdfs0r3oLE:-b5s8f8mvjo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=zUdfs0r3oLE:-b5s8f8mvjo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=zUdfs0r3oLE:-b5s8f8mvjo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=zUdfs0r3oLE:-b5s8f8mvjo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=zUdfs0r3oLE:-b5s8f8mvjo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=zUdfs0r3oLE:-b5s8f8mvjo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/zUdfs0r3oLE" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Ajax/default.aspx">Ajax</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/10/03/use-jquery-it-s-officially-supported-now.aspx</feedburner:origLink></item><item><title>Expose New Linq Operations from the Screaming HashSet&lt;T&gt; Collection</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/8FQWT046PBI/expose-new-linq-operations-from-the-screaming-hashset-lt-t-gt-collection.aspx</link><pubDate>Wed, 10 Sep 2008 13:17:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:59256</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Language_Integrated_Query"&gt;Linq&lt;/a&gt; is not just about databases. It’s about reading the registry, your hard-disk, or even a list of function pointers to be invoked. Linq is about more even then sets (collections). It’s about making tasks easier in many cases and vastly more powerful (and most importantly your code more readable and maintainable at the same time). &lt;br /&gt;&lt;a href="http://windowsclient.net/blogs/damonwildercarr/WindowsLiveWriter/GetMoreLinqOperationsandIntegratet.5only_B9AA/premature_6_2.jpg"&gt;&lt;img style="border-right-width:0px;margin:0px 0px 15px 20px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="premature_optimization" border="0" alt="premature_optimization" align="right" src="http://windowsclient.net/blogs/damonwildercarr/WindowsLiveWriter/GetMoreLinqOperationsandIntegratet.5only_B9AA/premature_6_thumb.jpg" width="244" height="181" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;h3&gt;It’s astounding just how fast the &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb397727.aspx"&gt;HashSet&amp;lt;T&amp;gt;&lt;/a&gt; collection is.&lt;/h3&gt;&lt;/blockquote&gt; &lt;p&gt;This post will show how to gain additional power that is fully supported from Microsoft which is often overlooked, yet it can solve some of the hardest problems (especially around performance however don’t prematurely optimize!).&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;br /&gt;There are tons of cases where we need a real powerhouse to manage super-large sets (in this example we will use the registry). An entire part of the registry actually. &lt;/p&gt; &lt;p&gt;Here is the API we want to use to query the HKLM part of our registry:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;FindFontsColors = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;from &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;rk &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;in &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Hklm
                                  &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;where
                                          &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;rk.Name.Contains(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;VisualStudio&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) &amp;amp;&amp;amp;
                                          rk.Name.EndsWith(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;FontsAndColors&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) &amp;amp;&amp;amp;
                                          rk.ValueCount &amp;gt; 0


                                  &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;select &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;rk.Name;

&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="left"&gt;The core win here is &amp;#39;ease of development and maintenance’ without the typical trade-off &lt;br /&gt;in performance. The entire equation is shifted actually so the tradeoff becomes irrelevant. &lt;/div&gt;
&lt;li&gt;
&lt;div align="left"&gt;Sure you could do this with a lot more code perhaps even a few ms faster. But at what real cost over the life of your code?&lt;/div&gt;
&lt;li&gt;
&lt;div align="left"&gt;The entire point of this post is the far greater win in maintenance and ease of understanding, without the assumed loss of things like performance.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When there is no intelligence available on a ‘back-end’ to parse your requests, yet you need the power of finding complex conditional results and much more, there is one recently introduced superstar that is often not described in terms of Linq:&lt;/p&gt;
&lt;h2&gt;HashSet&amp;lt;T&amp;gt;&lt;/h2&gt;
&lt;p&gt;Let’s start with some code. You know you can call ToList, ToArray, ToDictionary &amp;amp; ToLookup on your collections (we’ll call them Sequences to stay in line with Linq terms).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="right"&gt;You will see ‘sets’, ‘collections’ &amp;amp; sequences used together in documentation today. The differences are mostly academic, however the HashSet does illustrate some of those semantic differences which we point out.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;We are going to add an extension method to provide us a ToHashSet capability off any IEnumerable&amp;lt;T&amp;gt; (in exactly the same implementation style Microsoft used internally).&lt;/p&gt;
&lt;p&gt;Here is how we gain access to this type in the easiest way:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Collections.Generic;

    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;This extension method class will add a ToHashSet&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;&amp;lt;typeparamref name=&lt;/span&gt;&lt;span style="background:black;color:#9feca5;"&gt;&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/&amp;gt; 
    /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;in exactly the same way it is provided by the others:
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// 
    /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;ToList(), ToArray(), ToDictionary().. Now ToHashSet() is available
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static class &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSetLinqAccess
    &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSet&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt; ToHashSet&amp;lt;T&amp;gt;(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;this &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEnumerable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt; fromEnumerable, 
            &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEqualityComparer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt; comparer)
        {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(fromEnumerable == &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;)
                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;throw new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;fromEnumerable&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;);

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(comparer == &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;)
                comparer = &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;EqualityComparer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt;.Default;

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;!&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;typeof&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSet&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt;).IsAssignableFrom(fromEnumerable.GetType())
                           ? &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSet&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt;(fromEnumerable, comparer)
                           : (&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSet&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt;)fromEnumerable;
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSet&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt; ToHashSet&amp;lt;T&amp;gt;(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;this &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEnumerable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt; fromEnumerable) {

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;ToHashSet(fromEnumerable, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;EqualityComparer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;T&amp;gt;.Default);
        }
    }&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Ok so what are we going to do with the HashSet&amp;lt;T&amp;gt; and why?&lt;/p&gt;
&lt;p&gt;The benefit comes when we have in-memory large sequences to deal with. I will be using the following code as the ‘server’ here. This is code that provides a ‘Registry Server’ to our application. We will populate up a HashSet&amp;lt;T&amp;gt; with RegistryKey instances and then see just how fast it is.&lt;/p&gt;
&lt;p&gt;In the next post we will cover all of the additional methods the HashSet&amp;lt;T&amp;gt; exposes. &lt;/p&gt;
&lt;p&gt;Here is the code for our Registry Server. NOTE: Please do not try to modify this to change your registry unless you know what you are doing. This is an immutable (read-only) projection from the registry for a very good reason: You can thrash your machine otherwise.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------------------------------------------------------&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:#ecc03e;"&gt;namespace &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;domaindotnet.LinqToRegistry {
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Collections;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Collections.Generic;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Linq;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Runtime.CompilerServices;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Threading;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Castle.Core;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;LinqToCore;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Microsoft.Win32;

    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;Provider immutable projections from the registry
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;of the machine, as well as events for status and errors
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;via a singeton wrapper on the .NET Registry
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;singleton.
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;Here we are only exposing the HKLM area
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;subkey but you can see it is easily extensible
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public class &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEqualityComparer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt;, &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IInitializable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;,
                                  &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEnumerable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt; {
        &lt;/span&gt;&lt;span style="background:black;color:#f5f01f;"&gt;// IInitializable is from Castle.Core Contractually
        // saying we need a call on our Initialize() method
        // before we can be given out as a service to 
        // others

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static readonly &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;_instance;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static int &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;iCounter;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;HashSet&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt; allKeys;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;eventArgStatus;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private bool &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;isInitialized;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressDelegateError &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;populateError;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressDelegate &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;populateEventOk;

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;static &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;RegistryServer() {
            _instance = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;();
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;RegistryServer() {}

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static long &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Count {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;get &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{
                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(!_instance.isInitialized)
                    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;throw new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(
                            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Please initialize the backing store first&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;);

                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;_instance.allKeys.Count;
            }
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Hklm {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;get &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{
                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(!_instance.isInitialized)
                    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;throw new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(
                            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Please initialize the backing store first&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;);

                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;_instance;
            }
        }

        #region IEnumerable&amp;lt;RegistryKey&amp;gt; Members

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEnumerator&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt; GetEnumerator() {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(!isInitialized)
                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;throw new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(
                        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Please initialize the backing store first&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;);

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;allKeys.GetEnumerator();
        }

        &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEnumerator IEnumerable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.GetEnumerator() {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;GetEnumerator();
        }

        #endregion

        #region IEqualityComparer&amp;lt;RegistryKey&amp;gt; Members

        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;If either contains a null, the result is false (actually it is
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;null be we do not have that option. It is &amp;#39;unknown and indeterminant&amp;#39;.
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;An emptry string however is treated as &amp;#39;known to be empty&amp;#39; 
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;where null is &amp;#39;could be anything we have no idea&amp;#39;.
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&lt;/span&gt;&lt;span style="background:black;color:#9feca5;"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;param name=&lt;/span&gt;&lt;span style="background:black;color:#9feca5;"&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public bool &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Equals(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;x, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;y) {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;x.Name != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;amp;&amp;amp; y.Name != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;amp;&amp;amp; x.Name == y.Name;
        }

        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;For null names here we will calculate a funky random number
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;as null != null
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&lt;/span&gt;&lt;span style="background:black;color:#9feca5;"&gt;&amp;quot;obj&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public int &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;GetHashCode(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;obj) {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;obj.Name != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null
                           &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;? obj.Name.GetHashCode()
                           : &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RuntimeHelpers&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.GetHashCode(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;new object&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;());
        }

        #endregion

        #region IInitializable Members

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;void &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IInitializable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Initialize() {
            Initialize();
        }

        #endregion

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static event &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressDelegate &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgress {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;add &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{ _instance.populateEventOk += &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;value&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;; }
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;remove &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{ _instance.populateEventOk -= &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;value&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;; }
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;InvokePopulateProgress() {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgressDelegate = _instance.populateEventOk;
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(PopulateProgressDelegate != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) {
                eventArgStatus.ItemCount = &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Interlocked&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Increment(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;ref &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;iCounter);
                PopulateProgressDelegate(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;this&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;, eventArgStatus);
            }
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static event &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressDelegateError &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgressItemError {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;add &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{ _instance.populateError += &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;value&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;; }
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;remove &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{ _instance.populateError -= &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;value&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;; }
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;InvokePopulateProgressItemError(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;args) {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgressDelegateError = _instance.populateError;
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(PopulateProgressDelegateError != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;)
                PopulateProgressDelegateError(_instance, args);
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public static void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Initialize() {
            Initialize(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Registry&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.LocalMachine);
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Initialize(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;RegistryStartKey) {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(_instance.isInitialized)
                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;throw new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(
                        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Already Initialized. Cannot perform twice&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;);

            _instance.eventArgStatus = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;();

            _instance.allKeys = GetAllSubkeys(RegistryStartKey, &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;).ToHashSet(_instance);

            _instance.isInitialized = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;true&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;;
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static &lt;/span&gt;&lt;span style="background:black;color:#9185fa;"&gt;IEnumerable&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;&amp;gt; GetAllSubkeys(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;StartkeyIn,
                                                              &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;NodeKey) {
            _instance.InvokePopulateProgress();

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(StartkeyIn != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) {
                &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;SubItemRoot;

                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(TryOpenSubKey(StartkeyIn, NodeKey, &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;out &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;SubItemRoot)) {
                    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;yield return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;SubItemRoot;

                    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;foreach &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sub &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;in

                            &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;SubItemRoot.GetSubKeyNames().SelectMany( &lt;/span&gt;&lt;span style="background:black;color:#f5f01f;"&gt;// Recursion back into this method
                                    &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;s =&amp;gt; GetAllSubkeys(SubItemRoot, s)))

                        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;yield return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sub;
                }
            }
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static bool &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;TryOpenSubKey(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;StartFrom, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Name,
                                          &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;out &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryKey &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;itemOut) {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;bIsOK = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;false&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;;
            itemOut = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;;

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;try &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{
                itemOut = StartFrom.OpenSubKey(Name,
                        &lt;/span&gt;&lt;span style="background:black;color:#b8a223;"&gt;RegistryKeyPermissionCheck&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.ReadSubTree);
                &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;if &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(itemOut != &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;)
                    bIsOK = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;true&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;;
            }
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;catch &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Exception &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;ex) {
                InvokePopulateProgressItemError(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;new &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(-1,
                        ex.Message + &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Environment&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.NewLine + &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Key=&amp;quot; &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;+ StartFrom.Name + &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot; failed trying &amp;quot; &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;+ Name));
            }

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;bIsOK;
        }
                                  }

    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public delegate void &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressDelegateError&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;args);

    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public delegate void &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressDelegate&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;args);
}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:#ecc03e;"&gt;namespace &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;domaindotnet.LinqToRegistry {
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System;

    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
    /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;Simple EventArg for the two progress events
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// 
    /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;NOTE: There will typically be some errors
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;which is fine as some parts of the Registry are
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;not accessible with standard security
    &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public class &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;EventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{
        
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private readonly string &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;_keyName;

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgressEventArgs(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;int &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;itemCount) : &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;this&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(itemCount, &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) {}

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgressEventArgs(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;int &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;itemCount, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;String &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;KeyName) {

            ItemCount = itemCount;
            _keyName = KeyName;

        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;PopulateProgressEventArgs() : &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;this&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;(-1, &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;null&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) {}

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public string &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;KeyName {
            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;get &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{ &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;return &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;_keyName; }
        }

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public int &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;ItemCount { &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;get&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;; &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;internal set&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;; }
    }
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Although not required, if you want to use this Registry Server (it makes a fantastic ‘mock’ server – although not really a Mock at all) put all the code above in a separate assembly for ease of use.&lt;/p&gt;
&lt;p&gt;It’s great for trying our many variants of Linq queries over objects (as we do here) as the Registry – although a bit dangerous to muck about with – is a nice hierarchical source with enough interesting turns to make it fun. &lt;/p&gt;
&lt;p&gt;In practice we rarely need to change the registry but if we did, it would be though this (we would carefully evolve it so it could perform controlled updates).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;The Regression Tests&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So we are using xUnit because we like it. Use whatever you want. The code shown next is the abstract base class our real test cases will use:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:#ecc03e;"&gt;namespace &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;LinqToORMValidation {
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;domaindotnet.LinqToRegistry;

    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public abstract class &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;BaseTestContext &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{


        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;RegistryServer_OnPopulateProgress(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;args)
        {
            &lt;/span&gt;&lt;span style="background:black;color:#f5f01f;"&gt;//Console.WriteLine(&amp;quot;Processed &amp;quot; + args.ItemCount + &amp;quot; items&amp;quot;);

        &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;}

        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;private static void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;RegistryServer_OnPopulateProgressError(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;object &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sender, &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;PopulateProgressEventArgs &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;args)
        {
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Error : &amp;quot; &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;+ args.KeyName);
        }
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;protected &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;BaseTestContext() {

            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.PopulateProgress += RegistryServer_OnPopulateProgress;
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.PopulateProgressItemError += RegistryServer_OnPopulateProgressError;
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Initialize();

            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Initialization Complete. Total Records = &amp;quot; &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;+ &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Count);
        }

    }
}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;NOTE: Un-Comment the Console.WriteLine in the OnPopulateProgress to view the status as it runs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The main area to see is the protected constructor. It’s clear that the Singleton is exposing a separate Initialize() method (we did this on purpose as it can take a little while for all those keys to get inside the HashSet&amp;lt;T&amp;gt; and debugging things if they go wrong in say a static constructor is harder then making a long-running initialization explicit. In general a good design decision we believe.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So the final part of code for this post at least is the first test which indeed shows the exact query from the beginning working:&amp;quot;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:white;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="background:black;color:#ecc03e;"&gt;namespace &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;LinqToORMValidation {
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Diagnostics;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;System.Linq;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;domaindotnet.LinqToRegistry;
    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;using &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;Xunit;

    &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public class &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServerValidation &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;: &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;BaseTestContext &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;{


        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;As a Linq IEnumerable&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;&amp;lt;T&amp;gt; &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;result
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;if anything changed, the
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;underlying HashSet&lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;&amp;lt;T&amp;gt; &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;would not change. However if this
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;were a direct reference to the HashSet the values ARE
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;changeable. The idea is to project out immutable results
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;from the Registry server and indeed treat all the data 
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &lt;/span&gt;&lt;span style="background:black;color:#9ff5fd;"&gt;as read only
        &lt;/span&gt;&lt;span style="background:black;color:gray;"&gt;/// &amp;lt;/summary&amp;gt;
        &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;[&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Fact&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;]
        &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;public void &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;should_prove_basic() {

            &lt;/span&gt;&lt;span style="background:black;color:#f5f01f;"&gt;// Find the registry key(s) that have 
            // VisualStudo in the name and end in
            // &amp;#39;FontsAndColors&amp;#39; that also have at least
            // one value defined inside they key


            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;sw =&lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Stopwatch&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.StartNew();

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;FindFontsColors = &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;from &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;rk &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;in &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;RegistryServer&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Hklm
                                  &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;where
                                          &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;rk.Name.Contains(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;VisualStudio&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) &amp;amp;&amp;amp;
                                          rk.Name.EndsWith(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;FontsAndColors&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;) &amp;amp;&amp;amp;
                                          rk.ValueCount &amp;gt; 0


                                  &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;select &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;rk.Name;

            &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;var &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;countMatched = FindFontsColors.Count();
           
            sw.Stop();
            
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Total Records Matched = &amp;quot; &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;+ countMatched);
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Console&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot;Search Took : &amp;quot; &lt;/span&gt;&lt;span style="background:black;color:white;"&gt;+ sw.ElapsedMilliseconds + &lt;/span&gt;&lt;span style="background:black;color:#ecc03e;"&gt;&amp;quot; ms&amp;quot;&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;);
            
            &lt;/span&gt;&lt;span style="background:black;color:#f5f01f;"&gt;// Assert it took less then one second
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;Assert&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.True(sw.ElapsedMilliseconds &amp;lt; 1000);
            &lt;/span&gt;&lt;span style="background:black;color:#2b91af;"&gt;ObjectDumper&lt;/span&gt;&lt;span style="background:black;color:white;"&gt;.Write(FindFontsColors);
        }

 
    }
}&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For this test cases we are very specifically finding any keys across any in HKLM matching the conditions: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The key name ‘VisualStudio’ somewhere. 
&lt;li&gt;The key ends with &amp;#39;FontsAndColors’ 
&lt;li&gt;The key has at least one value inside (you’ll see why in the next post when things get harder) &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;We also introduce a time to show off the speed of the HashSet&amp;lt;T&amp;gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here I am making the assumption that the name of the key holds identity, and if null, we use standard null semantics (as defined in relational algebra).&lt;/p&gt;
&lt;p&gt;The only few interesting points are the use of the static RuntimeHelpers class from .NET as the fact we are using the singleton static instance as the Equality instance.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Running the Code&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://windowsclient.net/blogs/damonwildercarr/WindowsLiveWriter/GetMoreLinqOperationsandIntegratet.5only_B9AA/image_4.png"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://windowsclient.net/blogs/damonwildercarr/WindowsLiveWriter/GetMoreLinqOperationsandIntegratet.5only_B9AA/image_thumb_1.png" width="700" height="526" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;As expected we received a few errors, but they make sense as they are protected areas of the registry.&lt;/p&gt;
&lt;h3&gt;So we matched across 233142 instances of RegistryKey with three conditions in 746ms. Try that in RegEdt32!!&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div align="right"&gt;
&lt;table cellspacing="4" cellpadding="4" align="right"&gt;

&lt;tr&gt;
&lt;td&gt;
&lt;p align="center"&gt;MSDN Facts&lt;/p&gt;
&lt;p&gt;The HashSet&amp;lt;T&amp;gt; class provides high performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order. &lt;/p&gt;
&lt;p&gt;The capacity of a HashSet&amp;lt;T&amp;gt; object is the number of elements that the object can hold. A HashSet&amp;lt;T&amp;gt; object&amp;#39;s capacity automatically increases as elements are added to the object. &lt;/p&gt;
&lt;p&gt;The HashSet&amp;lt;T&amp;gt; class is a set collection that implements the &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.icollection.aspx"&gt;ICollection&lt;/a&gt; interface and the &lt;a href="http://msdn.microsoft.com/en-us/library/92t2ye13.aspx"&gt;ICollection&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; generic interface. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif" alt="" /&gt; Set Collections &lt;/p&gt;
&lt;p&gt;&lt;a name="sectionToggle0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In mathematics, a set is a collection of distinct objects that is usually defined by a rule that determines whether an element is a member of a particular set. For example, a set could be defined to contain &amp;quot;all the odd numbers between 1 and 21&amp;quot; or the numbers &amp;quot;1, 3, 5 and 7&amp;quot;. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif" alt="" /&gt; The HashSet Class &lt;/p&gt;
&lt;p&gt;&lt;a name="sectionToggle1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; class is based on the model of mathematical sets and provides high-performance set operations similar to accessing the keys of the &lt;a href="http://msdn.microsoft.com/en-us/library/xfhwa508.aspx"&gt;Dictionary&amp;lt;(Of &amp;lt;(TKey, TValue&amp;gt;)&amp;gt;)&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx"&gt;Hashtable&lt;/a&gt; collections. In simple terms, the &lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; class can be thought of as a &lt;a href="http://msdn.microsoft.com/en-us/library/xfhwa508.aspx"&gt;Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/a&gt; collection without values. &lt;/p&gt;
&lt;p&gt;A &lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; collection is not sorted and cannot contain duplicate elements. If order or element duplication is more important than performance for your application, consider using the &lt;a href="http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx"&gt;List&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; class together with the &lt;a href="http://msdn.microsoft.com/en-us/library/3da4abas.aspx"&gt;Sort&lt;/a&gt; method. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; provides many mathematical set operations, such as set addition (unions) and set subtraction. The following table lists the provided &lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&amp;lt;(Of &amp;lt;(T&amp;gt;)&amp;gt;)&lt;/a&gt; operations and their mathematical equivalents. &lt;/p&gt;
&lt;p&gt;HashSet(Of T) operation &lt;/p&gt;
&lt;p&gt;Mathematical equivalent &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb342097.aspx"&gt;UnionWith&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Union or set addition &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb293080.aspx"&gt;IntersectWith&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Intersection &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb299875.aspx"&gt;ExceptWith&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set subtraction &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb336848.aspx"&gt;SymmetricExceptWith&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Symmetric difference &lt;/p&gt;
&lt;p&gt;In addition to the listed set operations, the &lt;a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx"&gt;HashSet&amp;lt;(T&amp;gt;&lt;/a&gt; class also provides methods for determining set equality, overlap of sets, and whether a set is a subset or superset of another set. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;So far this has only set a baseline for the next exploration into these new methods provided in the HashSet&amp;lt;T&amp;gt; you might not have been aware of which we can now easily use: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="contents"&gt;
&lt;div style="height:607px;" id="ctl00_rs1_ra1" class="resizableArea"&gt;
&lt;div id="ctl00_rs1_raRight" class="rightSection"&gt;
&lt;div class="RightPanel"&gt;
&lt;div class="ContentArea"&gt;
&lt;div class="topic"&gt;
&lt;div id="mainSection"&gt;
&lt;div id="mainBody"&gt;
&lt;div id="ctl00_rs1_mainContentContainer_cpe804725" class="MTPS_CollapsibleRegion"&gt;
&lt;div style="width:auto;display:block;height:auto;overflow:visible;" id="ctl00_rs1_mainContentContainer_cpe804725_c" class="MTPS_CollapsibleSection"&gt;
&lt;div style="border-bottom:medium none;border-left:medium none;display:block;border-top:medium none;border-right:medium none;" class="MTPS_CollapsibleSection"&gt;
&lt;div class="tableSection"&gt;
&lt;table&gt;

&lt;tr&gt;
&lt;th&gt;
&lt;p&gt;HashSet(Of T) operation &lt;/p&gt;&lt;/th&gt;
&lt;th&gt;
&lt;p&gt;LINQ equivalent &lt;/p&gt;&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl84" href="http://msdn.microsoft.com/en-us/library/bb342097.aspx"&gt;UnionWith&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl85" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx"&gt;Union&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl86" href="http://msdn.microsoft.com/en-us/library/bb293080.aspx"&gt;IntersectWith&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl87" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx"&gt;Intersect&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl88" href="http://msdn.microsoft.com/en-us/library/bb299875.aspx"&gt;ExceptWith&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl89" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx"&gt;Except&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;Not Provided &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl90" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx"&gt;Distinct&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl91" href="http://msdn.microsoft.com/en-us/library/bb336848.aspx"&gt;SymmetricExceptWith&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl92" href="http://msdn.microsoft.com/en-us/library/bb355623.aspx"&gt;Overlaps&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl93" href="http://msdn.microsoft.com/en-us/library/bb358446.aspx"&gt;IsSubsetOf&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl94" href="http://msdn.microsoft.com/en-us/library/bb351418.aspx"&gt;IsProperSubsetOf&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl95" href="http://msdn.microsoft.com/en-us/library/bb346923.aspx"&gt;IsSupersetOf&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl96" href="http://msdn.microsoft.com/en-us/library/bb299734.aspx"&gt;IsProperSupersetOf&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;span&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl97" href="http://msdn.microsoft.com/en-us/library/bb346516.aspx"&gt;SetEquals&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;
&lt;td&gt;
&lt;p&gt;Not Provided. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:57bcd4fd-45be-4e95-9e9b-7dba54a771c6" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HashSet" rel="tag"&gt;HashSet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ORM" rel="tag"&gt;ORM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/NHibernate" rel="tag"&gt;NHibernate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Linq+to+NHibernate" rel="tag"&gt;Linq to NHibernate&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Linq+Undocumented" rel="tag"&gt;Linq Undocumented&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Functional+Programming" rel="tag"&gt;Functional Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET+3.5" rel="tag"&gt;.NET 3.5&lt;/a&gt;&lt;/div&gt;&lt;div class="wlWriterHeaderFooter" style="text-align:left;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;a href="http://digg.com/submit?url=http%3a%2f%2fwindowsclient.net%2fblogs%2fdamonwildercarr%2farchive%2f2008%2f09%2f10%2fexpose-new-linq-operations-from-the-screaming-hashset-lt-t-gt-collection.aspx&amp;amp;title=Expose+New+Linq+Operations+from+the+Screaming+HashSet%3cT%3e+Collection"&gt;&lt;img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=59256" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=8FQWT046PBI:3kSJ2l6Fx_g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=8FQWT046PBI:3kSJ2l6Fx_g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=8FQWT046PBI:3kSJ2l6Fx_g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=8FQWT046PBI:3kSJ2l6Fx_g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=8FQWT046PBI:3kSJ2l6Fx_g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=8FQWT046PBI:3kSJ2l6Fx_g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=8FQWT046PBI:3kSJ2l6Fx_g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=8FQWT046PBI:3kSJ2l6Fx_g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=8FQWT046PBI:3kSJ2l6Fx_g:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/8FQWT046PBI" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Linq/default.aspx">Linq</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/domain.dot.net/default.aspx">domain.dot.net</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/HashSet_3C00_T_3E00_/default.aspx">HashSet&lt;T&gt;</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/09/10/expose-new-linq-operations-from-the-screaming-hashset-lt-t-gt-collection.aspx</feedburner:origLink></item><item><title>Linq to Financial Markets : Optimizing Provider to Real-Time Quotes, Analytics, and Silverlight-WPF Visualization</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/boqhpUvn_I8/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization.aspx</link><pubDate>Sat, 23 Aug 2008 01:45:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:53303</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Announcing a new Optimizing Linq Provider&lt;/h2&gt;  

&lt;a href="http://technorati.com/claim/gesup7f6j" rel="me"&gt;Technorati Profile&lt;/a&gt;

&lt;p&gt;&lt;img src="http://dcarr.wordpress.com/files/2008/08/techsmithwor3bd.png" class="size-full wp-image-729 alignnone" style="border-width:0px;margin:10px;" alt="Linq to Financial Markets" width="424" height="342" /&gt;&lt;/p&gt;
  &lt;h3&gt;The Linq to Financial Markets provider&lt;/h3&gt;  
&lt;p&gt;An easier way to consume, visualize, understand and quantify just about any information you can imagine from the world of global financial services.&lt;/p&gt;
  
&lt;ul&gt;   
&lt;li&gt;Real-Time stock quotes to Complex Analytics of Multi-Asset Class Portfolios &lt;/li&gt;
    
&lt;li&gt;Monte-Carlo simulation with Optional Quantitative Add-Ins &lt;/li&gt;
    
&lt;li&gt;Efficient frontier Optimization based on Constraints you Set &lt;/li&gt;
    
&lt;li&gt;User defined heuristics from strategic rebalancing to day-trading &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p&gt;&lt;a href="http://www.xignite.com/"&gt;&lt;img src="http://dcarr.wordpress.com/files/2008/08/xignite_logo_anim.gif" class="alignnone size-full wp-image-748" alt="" width="336" height="80" /&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;img src="http://dcarr.wordpress.com/files/2008/08/techsmithwor5c.png" class="alignright size-full wp-image-700" style="margin:0px 0px 2px 7px;" alt="" width="280" height="151" /&gt;&lt;/p&gt;
  
&lt;p&gt;Thanks to &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx"&gt;Microsoft&amp;#39;s Linq technology (introduced in the .NET 3.5 platform)&lt;/a&gt;, the code in the image above is 100% real. It&amp;#39;s&lt;a href="http://blogs.msdn.com/charlie/archive/2008/06/16/cut-development-time-use-linq.aspx"&gt; well established that by making things easier and more &amp;#39;declarative&amp;#39; overall productivity goes up&lt;/a&gt;, quality improves and most importantly overall maintenance and future extensibility can get the attention they often lack once the non-strategic work is made unnecessary.&lt;/p&gt;
  
&lt;p&gt;In the case above we get the items in our portfolio now priced (using a real-time feed) below their 90 day moving average. You can &amp;#39;inject&amp;#39; added information as we do above for history. Another option would be to inject some &amp;#39;predictive&amp;#39; numbers using a simulation technique.&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx"&gt;There are many Linq providers&lt;/a&gt;, however most are &amp;#39;technology focused&amp;#39; such as dealing with protocols or platform APIs. We have always been the most interested in solving the harder problems driven from the business perspective. Although there are many technologies involved here, the larger difficulty is making it available in whatever way you would like to see it, across a broad set of dimensions well beyond any technology constraint.&lt;/p&gt;
  
&lt;p&gt;We support more then just &amp;#39;detail&amp;#39; information, You can use aggregate style commands (say you want to to get you assets for a pie chart that displays asset class holdings in percent). If you then wanted to drill-down, you could use the same asset class information in a &amp;#39;where&amp;#39; clause to limit the detail to just what you own in that class. But moving well beyond &amp;#39;SQL&amp;#39; type logic, you can set up monitoring alerts that take action if/when a trigger is met.&lt;/p&gt;
  
&lt;p&gt;The key is the same simple syntax is used for all data providers across all levels of information, including full-text scans and a new feature we&amp;#39;re working on now for a future release incorporating an even easier natural language syntax.&lt;/p&gt;
  
&lt;p&gt;This platform is not a fundamentally new way to calculate or retrieve this information. We&amp;#39;ve had access to many frameworks, API&amp;#39;s, data providers, etc. for a long time now.&lt;/p&gt;
  
&lt;p&gt;What this Linq provider does however, it change the dynamics of complexity, time to market, assumed costs in maintenance and testing, and much more. This offering&amp;#39;s goal is to make problems in this domain become utterly trivial. Our goal is to empower your team to make trivial what was previously arduous.&lt;/p&gt;
  
&lt;p&gt;You&amp;#39;re about to &amp;#39;declare&amp;#39; what you want, rather then describe each step in the process. If your thinking it looks a lot like &amp;#39;SQL&amp;#39; you&amp;#39;re 100% correct. However SQL could never achieve what Linq provides.&lt;/p&gt;
  
&lt;blockquote&gt;   
&lt;p style="text-align:center;"&gt;&lt;/p&gt;
    &lt;h4&gt;Comparing SQL to what Linq is capable of is like comparing your ability to easily retrieve information from accounting to easily retrieving information from &amp;#39;anything that is information&amp;#39;.&lt;/h4&gt; &lt;/blockquote&gt;
  
&lt;p&gt;Due to the nature of the access to this information, we are still working out the details for the open-source version we plan to offer soon. The world of the owners of this data has not caught up to the philosophy we have for transparency and shared value. &lt;a href="mailto:damon@domaindotnet.com"&gt;Send us an email for updates &lt;/a&gt;or simply register for the site feed. Also if your in the industry and have an interest we are looking for innovative early adopters. Also, we&amp;#39;ll be posting on many of the challenges we faced and a few innovative solutions we applied to the emerging and highly strategic domain of intelligent Linq Parser development.&lt;/p&gt;
  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:be681d48-faa8-4d98-a98a-d8e9f96c6310" style="margin:0px;padding:0px;display:inline;float:none;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Batched" rel="tag"&gt;Batched&lt;/a&gt;,&lt;a href="http://technorati.com/tags/C%23+3.0" rel="tag"&gt;C# 3.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Custom+Provider" rel="tag"&gt;Custom Provider&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Domain+Specific+Language" rel="tag"&gt;Domain Specific Language&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dsl" rel="tag"&gt;dsl&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Expression+Tree+Parse" rel="tag"&gt;Expression Tree Parse&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Financial+Engineering" rel="tag"&gt;Financial Engineering&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Financial+Services" rel="tag"&gt;Financial Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Lambada" rel="tag"&gt;Lambada&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Nasdaq" rel="tag"&gt;Nasdaq&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Parsed+Expressions" rel="tag"&gt;Parsed Expressions&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Portfolio+Optimization" rel="tag"&gt;Portfolio Optimization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visitor" rel="tag"&gt;Visitor&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web+Services" rel="tag"&gt;Web Services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XIgnite" rel="tag"&gt;XIgnite&lt;/a&gt;&lt;/div&gt;  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:408d275a-5b87-425b-9c32-bc9686da1703" style="margin:0px;padding:0px;display:inline;float:none;"&gt;del.icio.us Tags: &lt;a href="http://del.icio.us/popular/Batched" rel="tag"&gt;Batched&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/C%23+3.0" rel="tag"&gt;C# 3.0&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Custom+Provider" rel="tag"&gt;Custom Provider&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Domain+Specific+Language" rel="tag"&gt;Domain Specific Language&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/dsl" rel="tag"&gt;dsl&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Expression+Tree+Parse" rel="tag"&gt;Expression Tree Parse&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Financial+Engineering" rel="tag"&gt;Financial Engineering&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Financial+Services" rel="tag"&gt;Financial Services&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Lambada" rel="tag"&gt;Lambada&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Linq" rel="tag"&gt;Linq&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Nasdaq" rel="tag"&gt;Nasdaq&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Parsed+Expressions" rel="tag"&gt;Parsed Expressions&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Portfolio+Optimization" rel="tag"&gt;Portfolio Optimization&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Visitor" rel="tag"&gt;Visitor&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/Web+Services" rel="tag"&gt;Web Services&lt;/a&gt;,&lt;a href="http://del.icio.us/popular/XIgnite" rel="tag"&gt;XIgnite&lt;/a&gt;&lt;/div&gt;

&lt;a href="http://technorati.com/claim/gesup7f6j" rel="me"&gt;Technorati Profile&lt;/a&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=53303" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=boqhpUvn_I8:25J79zqfjDQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=boqhpUvn_I8:25J79zqfjDQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=boqhpUvn_I8:25J79zqfjDQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=boqhpUvn_I8:25J79zqfjDQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=boqhpUvn_I8:25J79zqfjDQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=boqhpUvn_I8:25J79zqfjDQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=boqhpUvn_I8:25J79zqfjDQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=boqhpUvn_I8:25J79zqfjDQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=boqhpUvn_I8:25J79zqfjDQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/boqhpUvn_I8" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Linq/default.aspx">Linq</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/New+York/default.aspx">New York</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/domain.dot.net/default.aspx">domain.dot.net</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Financial+Services/default.aspx">Financial Services</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Linq+Custom+Provider/default.aspx">Linq Custom Provider</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Optimizing+Parser/default.aspx">Optimizing Parser</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/08/22/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization.aspx</feedburner:origLink></item><item><title>Framework API Development Best Practices using C# 3.0</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/IPLPKYkHuys/framework-api-development-best-practices-using-c-3-0.aspx</link><pubDate>Tue, 19 Aug 2008 18:45:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:52095</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>0</slash:comments><description>&lt;h2 style="text-align:left;"&gt;&lt;b&gt;PART 1&lt;/b&gt;&lt;/h2&gt;  

  
&lt;p style="float:left;text-align:left;"&gt;&lt;a href="http://dcarr.files.wordpress.com/2008/05/image31.png"&gt;&lt;img src="http://dcarr.files.wordpress.com/2008/05/image3-thumb.png" class="alignright" style="border-width:0px;margin:5px;" alt="image" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align:left;"&gt;This content assumes you have an introductory knowledge of C# 3.0 language features in .NET 3.5 and mastery of legacy C# 2.0 Generics, Generic Type Constraints, Anonymous Delegates and related material.    &lt;br /&gt;    &lt;br /&gt;I use a &amp;#39;pair programming&amp;#39; approach with continued refactoring as this is how I would discuss it if you were coding with me, with an unfortunate one-way delivery.&lt;/p&gt;
  &lt;h3 style="text-align:left;"&gt;The Brief Strategic View&lt;/h3&gt;  
&lt;p style="text-align:left;"&gt;Microsoft has slowly been moving C# in a very productive direction (this is not new, as these features existed in 2.0 although not nearly as well integrated) to provide &amp;#39;Functional Language&amp;#39; features. If you don&amp;#39;t know or care about language semantics, just know that Linq and especially Lambada Expressions are about empowering you to use executable code like a variable, aka to leverage the power of functional programming. For more on this, read this &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc507636.aspx"&gt;MSDN article&lt;/a&gt; by &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc301175.aspx"&gt;Joel Pobar (former CLR Team)&lt;/a&gt; or read the next set of posts (part 2 onward) as I will go into the depths of this.&lt;/p&gt;
  
&lt;table style="text-align:left;" cellpadding="2" cellspacing="0"&gt;     
&lt;tr&gt;       
&lt;td&gt;         
&lt;p align="center"&gt;&lt;b&gt;I think of Lambadas as an incredibly focused and powerful domain specific language for delegates. &lt;/b&gt;&lt;/p&gt;
          
&lt;p&gt;&lt;b&gt;In this sense they are quite similar to Regular Expressions in that they are really good at their focus area.&lt;/b&gt;&lt;/p&gt;
          
&lt;p align="center"&gt;&lt;b&gt;What do I mean by good?&lt;/b&gt;&lt;/p&gt;
          
&lt;ul&gt;           
&lt;li&gt;             &lt;div&gt;Terse yet Understandable / Maintainable&lt;/div&gt;           &lt;/li&gt;
            
&lt;li&gt;             &lt;div&gt;Syntax tailored to the need, not the other way around.&lt;/div&gt;           &lt;/li&gt;
            
&lt;li&gt;             &lt;div&gt;Highly effective for problems that are orders of magnitude more difficult without them (a simple 10% improvement would not cut it)&lt;/div&gt;           &lt;/li&gt;
         &lt;/ul&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/table&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h2 style="text-align:left;"&gt;&lt;/h2&gt;  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h2 style="text-align:left;"&gt;Painless Intro&lt;/h2&gt;  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;I&amp;#39;ll start with a fairly trivial, yet important example (I use it every day). Many times when comparing Strings I want to ignore case and culture (the InvariantCulture). This is provided by an overload as such as you likely know:&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Test&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;,&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Category&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;BaselineCore&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public void &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;shouldAsserStringCloneInvokeEqual() {      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;baselineString = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;This is a TEST CASE to IgnOrE Casing&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;stringUpper = baselineString.ToUpperInvariant();      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Assert&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.IsTrue(baselineString.Equals(stringUpper,      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringComparison&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.InvariantCultureIgnoreCase)); &lt;/span&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;The test results are shown above. Pass. Ok so I really like short, concise code that is understandable at a glance. Also it&amp;#39;s a pain to always (even with ReSharper) use this (and I have seen people use RegEx for this! RegEx is awesome but overkill for this issue).&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Refactoring&lt;/p&gt;
  
&lt;ul style="text-align:left;"&gt;   
&lt;li&gt;Create an extension method on String &lt;/li&gt;
    
&lt;li&gt;Decide on a good name for the method (this is SO important and for most an afterthought!) &lt;/li&gt;
 &lt;/ul&gt;
  
&lt;p style="text-align:left;"&gt;I&amp;#39;ve settled on calling this new method on String &amp;#39;EqualsCore&amp;#39; as that is what we are doing, making the conditions for a match &amp;#39;simpler&amp;#39; and seeing &amp;#39;just the core values&amp;#39; are the same (anyway it makes sense to me)., I suppose this could be &amp;#39;EqualsRelaxed&amp;#39; or whatever..&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Here is the test case (no code yet):&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Test&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Category&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;BaselineCore&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public void &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;shouldAsserStringsEqualUsingExtension() {      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;baselineString = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;This is a TEST CASE to IgnOrE Casing&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Assert&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.IsTrue(baselineString. EqualsSimple(baselineString.ToUpperInvariant())); }&lt;/span&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Now we write the code. Here is the container for the extension method:&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static class &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringExtensions &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;{      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static bool &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EqualsSimple(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this string &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sTarget, &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;string &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;compare) {      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sTarget.Equals(compare, &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringComparison&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.InvariantCultureIgnoreCase); }      &lt;br /&gt;      &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Indeed they both pass:&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://dcarr.files.wordpress.com/2008/05/image25.png"&gt;&lt;img src="http://dcarr.files.wordpress.com/2008/05/image25-thumb.png" class="alignright" style="border-width:0px;float:right;" alt="image25" align="left" height="255" width="455" /&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://dcarr.files.wordpress.com/2008/05/image25.png"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Since every type inherits from Object, and Equals is defined on Object, all instances should support this approach, and I could be early bound by using Generics.... Hmm...&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;I tried this (note: I gave it a new new &amp;#39;EqualsThis&amp;#39; to separate them.&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static bool &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EqualsThis&amp;lt;TTarget&amp;gt;(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;TTarget sTarget, TTarget compare){      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;return &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sTarget.Equals(compare);      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Functionally not that interesting at all, but a test. So I typed in the following and wow... It works from Intellisense&amp;#39;s view... Ok it compiled! Wait.....FAIL! But why:?&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;OK here is the new test:&lt;/p&gt;
  
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Test&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;, &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Category&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;BaselineCore&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;)]      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public void &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;shouldAsserANYTHINGEqualUsingExtension() {      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;const &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;String &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;baselineString =&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;This is a TEST CASE to IgnOrE Casing&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(baselineString);      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Assert&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.IsTrue(sb.EqualsThis(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(sb.ToString())));      &lt;br /&gt;      &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://dcarr.files.wordpress.com/2008/05/image261.png"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Interesting...&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Here is the documentation for what &lt;i&gt;&lt;span style="text-decoration:underline;"&gt;Equals&lt;/span&gt;&lt;/i&gt; means by default from Microsoft:&lt;/p&gt;
  
&lt;table style="text-align:left;" cellpadding="2" cellspacing="0"&gt;     
&lt;tr&gt;       
&lt;td&gt;         
&lt;p align="center"&gt;Returns: true if objA is the same instance as objB or if both are null references or if objA.Equals(objB) returns true; otherwise, false.&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/table&gt;
  
&lt;p style="text-align:left;"&gt;So our code fails using the extension yet this returns true:&lt;/p&gt;
  
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Test&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;] &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public void &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;shouldAssertStringBuilderExplicit() {      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;const &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;String &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;baselineString = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;This is a TEST CASE to IgnOrE Casing&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(baselineString);      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb2 = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(baselineString); &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Assert&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.IsTrue(sb.Equals(sb2));      &lt;br /&gt;      &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;So Reflector to the rescue once again. I could see in Reflector what I believed the issue was. Indeed the StringBuilder class has an overloaded Equals, and even making the extension method cast to the generic type directly was a no go.&lt;/p&gt;
  
&lt;table style="text-align:left;" cellpadding="2" cellspacing="0"&gt;     
&lt;tr&gt;       
&lt;td&gt;         
&lt;p align="center"&gt;So what do you think? Why would this compile fine with absolutely no problems (and that is correct it turns out), but FAIL at runtime on the assertion when the same line above passes? Skip ahead and reply with the answer if you know it....&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/table&gt;
  
&lt;p style="text-align:left;"&gt;This exposes one of the dangers that we must be incredibly careful with. It has always been poor design in my opinion to encourage developers to override common methods such as ToString() and Equals(object X) with their own behaviors as you force consumers of the API to understand IMPLEMENTATION. You cannot ensure your OK simply from a contract. This is known to be evil....&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Of course this is a legacy style and will be slowly phased out.&lt;/p&gt;
  
&lt;p style="text-align:left;"&gt;Spin up reflector and look at the code for the OVERLOAD that StringBuilder has:&lt;/p&gt;
  &lt;div style="text-align:left;"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Equals(StringBuilder sb){     &lt;br /&gt;    &lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (sb == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;     &lt;br /&gt;    &lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; (((&lt;span class="kwrd"&gt;this&lt;/span&gt;.Capacity == sb.Capacity) &amp;amp;&amp;amp; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.MaxCapacity == sb.MaxCapacity))     &lt;br /&gt;&amp;amp;&amp;amp;     &lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.m_StringValue.Equals((&lt;span class="kwrd"&gt;string&lt;/span&gt;) sb.m_StringValue));     &lt;br /&gt;    &lt;br /&gt;}&lt;/div&gt;  &lt;div style="text-align:left;"&gt;   
&lt;p style="text-align:left;"&gt;Of course! How else could a StringBuilder claim to be &amp;#39;Equal&amp;#39; to another... In fact it is perfectly reasonable but again shows the danger of late binding, making assumptions about how any &amp;#39;object&amp;#39; type will perform.&lt;/p&gt;
 &lt;/div&gt;  &lt;div style="text-align:left;"&gt;   
&lt;p style="text-align:left;"&gt;So there was no real way for our extension to call the &amp;#39;correct&amp;#39; equals. It called the base definition given above which is obvious now why it failed.&lt;/p&gt;
    
&lt;p style="text-align:left;"&gt;&lt;/p&gt;
    
&lt;p style="text-align:left;"&gt;So how do we fix this for the general case?&lt;/p&gt;
    &lt;div style="text-align:left;"&gt;     
&lt;p style="text-align:left;"&gt;Here is the test case which I got working.. If your not familiar with this style of code,&lt;b&gt;&lt;span style="text-decoration:underline;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
   &lt;/div&gt;    &lt;div style="text-align:left;"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;This is the foundation we build layer after layer on and illustrates the core of this post.          &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;    
&lt;p style="text-align:left;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
    
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;[&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Test&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;] &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public void &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;shouldAsserANYTHINGEqualUsingExtension() {        &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;const &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;String &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;baselineString = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;quot;This is a TEST CASE to IgnOrE Casing&amp;quot;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;;        &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(baselineString);        &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;var &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;sb2 = &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;new &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;StringBuilder&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;(baselineString);        &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Assert&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;.IsTrue(sb.EqualsThis(x =&amp;gt; x.Equals(sb2)));        &lt;br /&gt;        &lt;br /&gt;} &lt;/span&gt;&lt;/p&gt;
    
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
    
&lt;table style="text-align:left;" cellpadding="2" cellspacing="0"&gt;       
&lt;tr&gt;         
&lt;td&gt;           
&lt;p align="center"&gt;Lambadas are like an incredibly focused and powerful domain specific language for delegates. In this sense they are quite similar to Regular Expressions in that they are really good (and to quantify good, I mean clear yet precise, not overly verbose yet highly effective for problems that are more difficult without them).&lt;/p&gt;
         &lt;/td&gt;
       &lt;/tr&gt;
     &lt;/table&gt;
    &lt;div style="text-align:left;"&gt;&lt;a href="http://dcarr.files.wordpress.com/2008/05/image7.png"&gt;&lt;/a&gt;&lt;/div&gt;    &lt;div style="text-align:left;"&gt;So what about the implementation? Here it is:&lt;/div&gt;    
&lt;p&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;public static bool &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EqualsThis&amp;lt;TTarget&amp;gt;(&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;this &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;TTarget sTarget,        &lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;Predicate&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;lt;TTarget&amp;gt; EqualsDelegate) {        &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &lt;/span&gt;&lt;span style="background:black none repeat scroll 0px 50%;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;EqualsDelegate.Invoke(sTarget);        &lt;br /&gt;        &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
    
&lt;p style="text-align:left;"&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;div style="text-align:left;"&gt;It&amp;#39;s all about Expressions! Think of them as varied ways to receive executable code that you can &amp;#39;invoke&amp;#39; literally, that must meet the contract you define.&lt;/div&gt;    &lt;div style="text-align:left;"&gt;This is so basic after we cover what the really useful applications are. However remember this has nothing to do with the examples, only the concepts they represent.      &lt;br /&gt;      &lt;br /&gt;&lt;/div&gt;    &lt;h1 style="text-align:left;"&gt;&lt;b&gt;       &lt;br /&gt;&lt;/b&gt;&lt;/h1&gt;    
&lt;table style="text-align:left;" cellpadding="2" cellspacing="0"&gt;       
&lt;tr&gt;         
&lt;td&gt;           &lt;div&gt;&amp;nbsp;&lt;/div&gt;            
&lt;ol&gt;             
&lt;li&gt;&lt;b&gt;Combine Generics and &lt;span style="text-decoration:underline;"&gt;Generic Constraints&lt;/span&gt; to your Extension Methods but BE CAREFUL and ensure you are covered by unit tests &lt;/b&gt;&lt;/li&gt;
              
&lt;li&gt;&lt;b&gt;Try to always &lt;span style="text-decoration:underline;"&gt;think a level of abstraction above&lt;/span&gt; where your immediate need is to see if your solution indeed has wider and perhaps far more valuable contribution. &lt;/b&gt;&lt;/li&gt;
              
&lt;li&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;Hide complexity&lt;/span&gt; behind your Framework API, and focus on crafting work that others will easily consume.&lt;/b&gt; &lt;/li&gt;
           &lt;/ol&gt;
         &lt;/td&gt;
       &lt;/tr&gt;
     &lt;/table&gt;
 &lt;/div&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=52095" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=IPLPKYkHuys:6B1pMY0YuLE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=IPLPKYkHuys:6B1pMY0YuLE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=IPLPKYkHuys:6B1pMY0YuLE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=IPLPKYkHuys:6B1pMY0YuLE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=IPLPKYkHuys:6B1pMY0YuLE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=IPLPKYkHuys:6B1pMY0YuLE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=IPLPKYkHuys:6B1pMY0YuLE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=IPLPKYkHuys:6B1pMY0YuLE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=IPLPKYkHuys:6B1pMY0YuLE:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/IPLPKYkHuys" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/ReFactoring/default.aspx">ReFactoring</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Linq/default.aspx">Linq</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/domain.dot.net/default.aspx">domain.dot.net</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/08/19/framework-api-development-best-practices-using-c-3-0.aspx</feedburner:origLink></item><item><title>ReSharper 4.01 RC1 Released : See the Team Here as Well</title><link>http://feedproxy.google.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~3/_sN3fKBlFXs/resharper-4-01-rc1-released-with-great-wcf-xaml-support.aspx</link><pubDate>Thu, 14 Aug 2008 02:00:00 GMT</pubDate><guid isPermaLink="false">f1c07d22-4184-4df1-9c40-8dd04b52e796:50468</guid><dc:creator>Damon Wilder Carr</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Download it (or when this is outdated, later releases) from:&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+Nightly+Builds" title="ReSharper EAP" target="_blank"&gt;&lt;img src="http://dcarr.wordpress.com/files/2008/08/spectrum_2.png?w=300" class="alignnone size-medium wp-image-703" title="spectrum_2" alt="" width="300" height="41" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+Nightly+Builds" title="ReSharper EAP" target="_blank"&gt;Build #: 922 VERSION 4.0.1 RC1&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;
&lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+4.0+Nightly+Builds" title="ReSharper EAP" target="_blank"&gt;&lt;/a&gt;
&lt;ul&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Anchipolevsky_small.gif" alt="photo" /&gt;
Sergey Anchipolevsky&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Alshannikov_Igor_small.gif" alt="photo" /&gt;
Igor Alshannikov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Anisimov_Alexander_small.gif" alt="photo" /&gt;
Alexander Anisimov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Avdeev_Dmitry_small.gif" alt="photo" /&gt;
Dmitry Avdeev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Baranov_small.gif" alt="photo" /&gt;
Sergey Baranov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Yury_Belyaev_small.gif" alt="photo" /&gt;
Yury Belyaev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Natalia_Belyaeva_small.gif" alt="photo" /&gt;
Natalia Belyaeva&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/David_Booth_small.gif" alt="photo" /&gt;
Dave Booth&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Bukreeva_Elena_small.gif" alt="photo" /&gt;
Elena Bukreeva&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Jana_Charif_small.gif" alt="photo" /&gt;
Jana Charif&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Nikolay_Chashnikov_small.gif" alt="photo" /&gt;
Nikolay Chashnikov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/soon.gif" alt="photo" /&gt;
Alexander Chernikov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Roman_Chernyatchik_small.gif" alt="photo" /&gt;
Roman Chernyatchik&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Coox_Sergey_small.gif" alt="photo" /&gt;
Sergey Coox&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Dmitriev_small.gif" alt="photo" /&gt;
Sergey Dmitriev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Ilia_Dumov_small.gif" alt="photo" /&gt;
Ilia Dumov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Michael_Gerasimov_small.gif" alt="photo" /&gt;
Michael Gerasimov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Golovachev_small.gif" alt="photo" /&gt;
Sergey Golovachev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Alexey_Gopachenko_small.gif" alt="photo" /&gt;
Alexey Gopachenko&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Gromov_Peter_small.gif" alt="photo" /&gt;
Peter Gromov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Dmitry_Jemerov_small.gif" alt="photo" /&gt;
Dmitry Jemerov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Khalusova_Maria_small.gif" alt="photo" /&gt;
Maria Khalusova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Valentin_Kipiatkov_small.gif" alt="photo" /&gt;
Valentin Kipiatkov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Konopko_Kirill_small.gif" alt="photo" /&gt;
Cyril Konopko&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/soon.gif" alt="photo" /&gt;
Anna Kozlova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Mikhail_Kropotov_small.gif" alt="photo" /&gt;
Mikhail Kropotov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Alexey_Kudravtsev_small.gif" alt="photo" /&gt;
Alexey Kudravtsev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Lobacheva_Olga_small.gif" alt="photo" /&gt;
Olga Lobacheva&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Dmitry_Lomov_small.gif" alt="photo" /&gt;
Dmitry Lomov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Vyacheslav_Lukianov_small.gif" alt="photo" /&gt;
Vyacheslav Lukianov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Anton_Makeev_small.gif" alt="photo" /&gt;
Anton Makeev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Malishev_Egor_small.gif" alt="photo" /&gt;
Egor Malyshev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Maria_Marakulina_small.gif" alt="photo" /&gt;
Maria Marakulina&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Kirill_Maximov_small.gif" alt="photo" /&gt;
Kirill Maximov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sasha_Maximova_small.gif" alt="photo" /&gt;
Sasha Maximova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/soon.gif" alt="photo" /&gt;
Irina Megorskaya&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Morawiecova_Lucie_small.gif" alt="photo" /&gt;
Lucie Morawiecova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Morozov_Alexander_small.gif" alt="photo" /&gt;
Alexander Morozov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Mossienko_Maxim_small.gif" alt="photo" /&gt;
Maxim Mossienko&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Musienko_Ekaterina_small.gif" alt="photo" /&gt;
Ekaterina Musienko&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Ann_Oreshnikova_small.gif" alt="photo" /&gt;
Ann Oreshnikova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Eugene_Pasynkov_small.gif" alt="photo" /&gt;
Eugene Pasynkov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Vaclav_Pech_small.gif" alt="photo" /&gt;
Vaclav Pech&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Alexey_Pegov_small.gif" alt="photo" /&gt;
Alexey Pegov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Marie_Pejcharova_small.gif" alt="photo" /&gt;
Marie Pejcharova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Petrenko_Eugene_small.gif" alt="photo" /&gt;
Eugene Petrenko&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Irina_Petrovskaya_small.gif" alt="photo" /&gt;
Irina Petrovskaya&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Mikhail_Pilin_small.gif" alt="photo" /&gt;
Mikhail Pilin&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Polonsky_Konstantin_small.gif" alt="photo" /&gt;
Konstantin Polonsky&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Julia_Repina_small.gif" alt="photo" /&gt;
Julia Repina&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Elizaveta_Revyakina_small.gif" alt="photo" /&gt;
Elizaveta Revyakina&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Ryzhenkov_Ilya_small.gif" alt="photo" /&gt;
Ilya Ryzhenkov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Serebryansky_Andrew_small.gif" alt="photo" /&gt;
Andrew Serebryansky&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Ilya_small.gif" alt="photo" /&gt;
Ilya Sergey&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Maxim_Shafirov_small.gif" alt="photo" /&gt;
Maxim Shafirov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Tatiana_Slavina_small.gif" alt="photo" /&gt;
Tatiana Slavina&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Olesya_Smirnova_small.gif" alt="photo" /&gt;
Olesya Smirnova&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Konstantin_Solomatov_small.gif" alt="photo" /&gt;
Konstantin Solomatov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Oleg_Stepanov_small.gif" alt="photo" /&gt;
Oleg Stepanov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sher_Pavel_small.gif" alt="photo" /&gt;
Pavel Sher&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Shliakhovetskaja_Ekaterina_small.gif" alt="photo" /&gt;
Ekaterina Shliakhovetskaja&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Shpynov_Oleg_small.gif" alt="photo" /&gt;
Oleg Shpynov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Shrago_Gregory_small.gif" alt="photo" /&gt;
Gregory Shrago&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Udov_George_small.gif" alt="photo" /&gt;
George Udov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Vasiliev_small.gif" alt="photo" /&gt;
Sergey Vasiliev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Natalie_Yaremych_small.gif" alt="photo" /&gt;
Natalie Yaremych&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Yarko_Yegor_small.gif" alt="photo" /&gt;
Yegor Yarko&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Zambalayev_Timur_small.gif" alt="photo" /&gt;
Timur Zambalayev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Sergey_Zhukov_small.gif" alt="photo" /&gt;
Sergey Zhukov&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Eugene_Zhuravlev_small.gif" alt="photo" /&gt;
Eugene Zhuravlev&lt;/li&gt;
	
&lt;li style="padding:5px;float:left;"&gt;&lt;img src="http://www.jetbrains.com/company/people/photos/Alexander_Zverev_small.gif" alt="photo" /&gt;
Alexander Zverev&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;
&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=50468" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=_sN3fKBlFXs:OOgBbhiYx5A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=_sN3fKBlFXs:OOgBbhiYx5A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=_sN3fKBlFXs:OOgBbhiYx5A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=_sN3fKBlFXs:OOgBbhiYx5A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=_sN3fKBlFXs:OOgBbhiYx5A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=_sN3fKBlFXs:OOgBbhiYx5A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=_sN3fKBlFXs:OOgBbhiYx5A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?i=_sN3fKBlFXs:OOgBbhiYx5A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?a=_sN3fKBlFXs:OOgBbhiYx5A:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/UbiquitousFluencyADomain-drivenTeamLearnsToLoveTheView/~4/_sN3fKBlFXs" height="1" width="1"/&gt;</description><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/ReFactoring/default.aspx">ReFactoring</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/Linq/default.aspx">Linq</category><category domain="http://blogs.windowsclient.net/damonwildercarr/archive/tags/C_2300_/default.aspx">C#</category><feedburner:origLink>http://blogs.windowsclient.net/damonwildercarr/archive/2008/08/13/resharper-4-01-rc1-released-with-great-wcf-xaml-support.aspx</feedburner:origLink></item></channel></rss>
