<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8304297248644840550</id><updated>2012-02-16T05:52:18.028-05:00</updated><category term='C#'/><category term='LINQ'/><category term='Reflection'/><category term='SQL'/><category term='VisualStudio'/><category term='Programming Challenge'/><category term='.Net'/><category term='HTML'/><category term='XML'/><category term='Windows Service'/><category term='IIS7'/><category term='Windows'/><category term='ASP.Net'/><category term='Oracle'/><category term='VB'/><category term='CSLA'/><title type='text'>.Net Dust</title><subtitle type='html'>a little dirt never hurt anyone</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-7487403355364796221</id><published>2011-02-24T10:33:00.005-05:00</published><updated>2011-02-24T10:56:11.004-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS7'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>IIS7 AppPool Controller</title><content type='html'>We have multiple Application Pools at my work that we sometimes have to go through and recycle all by hand.  I'm a lazy programmer, so I made an app that does it for me.  It also displays the PID and CPU utilization for each app pool, and allows you to completely start and stop all application pools, or one at a time. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-2Vm2i25wy5A/TWZ73hpIzqI/AAAAAAAAAHU/mwVQAbHYQDI/s1600/AppPoolControllerPreview.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 316px;" src="http://3.bp.blogspot.com/-2Vm2i25wy5A/TWZ73hpIzqI/AAAAAAAAAHU/mwVQAbHYQDI/s400/AppPoolControllerPreview.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5577281382398873250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It comes with the standard "Works On My Machine" disclaimer from Scott Hansleman:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Works On My Machine Disclaimer&lt;/b&gt;: This is released with exactly zero warranty or support. If it deletes files or kills your family pet, you have been warned. It might work great, and it might not.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B0By9PBv_3cDNjVhNWU4YjItMTUzMC00OWI2LTlmNWMtN2MxZDgzNzM3ZDBi&amp;amp;hl=en"&gt;Download Source Code Here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/uc?id=0B0By9PBv_3cDMDMzN2Q1NTAtM2M1ZC00YmFmLWEwZjItMzg4NjgzYzM4Zjhl&amp;amp;export=download&amp;amp;hl=en"&gt;Download EXE Here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-7487403355364796221?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/7487403355364796221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=7487403355364796221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7487403355364796221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7487403355364796221'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2011/02/iis7-apppool-controller.html' title='IIS7 AppPool Controller'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-2Vm2i25wy5A/TWZ73hpIzqI/AAAAAAAAAHU/mwVQAbHYQDI/s72-c/AppPoolControllerPreview.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-2697248420381736471</id><published>2011-02-22T14:40:00.000-05:00</published><updated>2011-02-22T14:41:05.723-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Getting % Processor Time for Process By PID</title><content type='html'>&lt;p&gt;I had to search and search on how to do this, and now hopefully no one else will.  It’s fairly easy to get the % CPU Usage for a process using the System.Diagnostics.PerformanceCounter (as long as you remember to sleep a second so you can get the a correct value and divide by the number of CPUs).  That looks like this:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt; pc = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;"Process"&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;"% Processor Time"&lt;/span&gt;&lt;span style="color: black"&gt;, processName, &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;pc.NextValue();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;&lt;span style="color: black"&gt;.Sleep(&lt;/span&gt;&lt;span style="color: red"&gt;1000&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; cpuPercent = (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)ppc.PerformanceCounter.NextValue() / &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Environment&lt;/span&gt;&lt;span style="color: black"&gt;.ProcessorCount;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The PerformanceCounter constructor accepts the processName, but it doesn’t accept a process id, so if you had multiple processes with the same name (w3wp, svchost, etc.) you can’t get the value for a specific process easily.  If there are multiple processes with the same name running, they’ll have names like “w3wp#1” and “w3wp#2”, where the 1 and the 2 are completely unrelated to ProcessId.  I ended up creating this method to get the performance counter process name for a given process.  You could be extra fancy and make it an extension method on the Process Class, but this works for now:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: blue"&gt;private string&lt;/span&gt;&lt;span style="color: black"&gt; GetPerformanceCounterProcessName(&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; pid)&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt; GetPerformanceCounterProcessName(pid, System.Diagnostics.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Process&lt;/span&gt;&lt;span style="color: black"&gt;.GetProcessById(pid).ProcessName);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;private string&lt;/span&gt;&lt;span style="color: black"&gt; GetPerformanceCounterProcessName(&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; pid, &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; processName)&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; nameIndex = &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; value = processName;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt; counterName = processName + &lt;/span&gt;&lt;span style="color: #a31515"&gt;"#"&lt;/span&gt;&lt;span style="color: black"&gt; + nameIndex;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt; pc = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;"Process"&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;"ID Process"&lt;/span&gt;&lt;span style="color: black"&gt;, counterName, &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;while&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;        {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (pid == (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)pc.NextValue())&lt;br /&gt;           {&lt;br /&gt;               value = counterName;&lt;br /&gt;               &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;           }&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;            {&lt;br /&gt;               nameIndex++;&lt;br /&gt;               counterName = processName + &lt;/span&gt;&lt;span style="color: #a31515"&gt;"#"&lt;/span&gt;&lt;span style="color: black"&gt; + nameIndex;&lt;br /&gt;               pc = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;"Process"&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;"ID Process"&lt;/span&gt;&lt;span style="color: black"&gt;, counterName, &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;SystemException&lt;/span&gt;&lt;span style="color: black"&gt; ex)&lt;br /&gt;       {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (ex.Message == &lt;/span&gt;&lt;span style="color: #a31515"&gt;"Instance '"&lt;/span&gt;&lt;span style="color: black"&gt; + counterName + &lt;/span&gt;&lt;span style="color: #a31515"&gt;"' does not exist in the specified Category."&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;           {&lt;br /&gt;               &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;           }&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;            {&lt;br /&gt;               &lt;/span&gt;&lt;span style="color: blue"&gt;throw&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt; value;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then calling it would look like this:&lt;/p&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt; pc = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PerformanceCounter&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;"Process"&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;"% Processor Time"&lt;/span&gt;&lt;span style="color: black"&gt;, GetPerformanceCounterProcessName(PID), &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;pc.NextValue();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;&lt;span style="color: black"&gt;.Sleep(&lt;/span&gt;&lt;span style="color: red"&gt;1000&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; cpuPercent = (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)ppc.PerformanceCounter.NextValue() / &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Environment&lt;/span&gt;&lt;span style="color: black"&gt;.ProcessorCount;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-2697248420381736471?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/2697248420381736471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=2697248420381736471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/2697248420381736471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/2697248420381736471'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2011/02/getting-processor-time-for-process-by.html' title='Getting % Processor Time for Process By PID'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8770008853922312434</id><published>2010-11-18T15:19:00.001-05:00</published><updated>2010-11-18T15:21:49.781-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>String Array UDT for Oracle, and Something Better</title><content type='html'>&lt;p&gt;For work I was creating a simple website that allowed a user to batch multiple items together.&amp;#160; I was planning on taking the id’s of the items that they batched, and passing them into an Oracle SP, so they could be used in a “Where in” statement.&amp;#160; In MS-SQL you can hack together a solution doing some fancy string parsing, and the Execute query function, but you have lots of issues if your csv string is longer than 8000 characters.&amp;#160; I wanted to do it the “right” way in Oracle using a UDT (User Defined Type). &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Basically to be able to pass an Oracle UDT as a parameter to a SP from C#, you have to create a C# class for your UDT which implements IOracleCustomType, INullable, and a factory to create the objects. First, here is the Oracle Code for the UDT and the SP:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;create or replace &lt;br /&gt;  &lt;br /&gt;TYPE STRINGARRAY_UDT AS varray(3000) OF VARCHAR2(30);&lt;/p&gt;&lt;br /&gt;&lt;p&gt;create or replace &lt;br /&gt;  &lt;br /&gt;PROCEDURE TEST_ARRAY &lt;br /&gt;  &lt;br /&gt;( &lt;br /&gt;  &lt;br /&gt;&amp;#160; IN_MODELS IN STRINGARRAY_UDT, &lt;br /&gt;  &lt;br /&gt;&amp;#160; OUT_MODELS OUT SYS_REFCURSOR &lt;br /&gt;  &lt;br /&gt;) AS &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;BEGIN &lt;br /&gt;  &lt;br /&gt;&amp;#160; OPEN OUT_MODELS FOR &lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT * from Items WHERE id IN (SELECT * FROM table(IN_MODELS)); &lt;br /&gt;  &lt;br /&gt;END TEST_ARRAY;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The C# code is rather simple as well, but you have to create a class for each UDT that you want to use.&amp;#160; This is a real pain (which leads me onto something better).&amp;#160; If you want to create a UDT with types that are not nullable, you have to maintain your own OracleStatus array to determine if the element is null or not, and pass it into the OractleUdt.SetValue and OracleUdt.GetValue.&amp;#160; The StringArrayUDTFactory get’s called by Oracle to create the object, it then uses reflection to call the FromCustomeObject or ToCustomObject methods, depending on whether you’re passing the UDT to oracle, or retrieving it from Oracle.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringArrayUDT&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IOracleCustomType&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;INullable&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;{&lt;br /&gt;    [&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleArrayMapping&lt;/span&gt;&lt;span style="color: black"&gt;()]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public string&lt;/span&gt;&lt;span style="color: black"&gt;[] Array { &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: blue"&gt;set&lt;/span&gt;&lt;span style="color: black"&gt;; }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; StringArrayUDT()&lt;br /&gt;    {&lt;br /&gt;        Array = &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; StringArrayUDT(&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;[] array)&lt;br /&gt;    {&lt;br /&gt;        Array = array;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #region&lt;/span&gt;&lt;span style="color: black"&gt; INullable Members&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public bool&lt;/span&gt;&lt;span style="color: black"&gt; IsNull { &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt; Array == &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;; } }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #endregion&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #region&lt;/span&gt;&lt;span style="color: black"&gt; IOracleCustomType Members&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public void&lt;/span&gt;&lt;span style="color: black"&gt; FromCustomObject(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleConnection&lt;/span&gt;&lt;span style="color: black"&gt; con, System.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;&lt;span style="color: black"&gt; pUdt)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleUdt&lt;/span&gt;&lt;span style="color: black"&gt;.SetValue(con, pUdt, &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;, Array);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public void&lt;/span&gt;&lt;span style="color: black"&gt; ToCustomObject(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleConnection&lt;/span&gt;&lt;span style="color: black"&gt; con, System.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;&lt;span style="color: black"&gt; pUdt)&lt;br /&gt;    {&lt;br /&gt;        Array = (&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;[])&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleUdt&lt;/span&gt;&lt;span style="color: black"&gt;.GetValue(con, pUdt, &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public override string&lt;/span&gt;&lt;span style="color: black"&gt; ToString()&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (IsNull)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;NULL&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;StringArrayUDT('&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&lt;span style="color: black"&gt;.Join(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;', '&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, Array) + &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;')&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #endregion&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/* StringArrayUDTFactory Class&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;**   An instance of the StringArrayUDTFactory class is used to create &lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;**   StringArrayUDT objects&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;*/&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleCustomTypeMapping&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;MySchema.STRINGARRAY_UDT&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringArrayUDTFactory&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IOracleCustomTypeFactory&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IOracleArrayTypeFactory&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #region&lt;/span&gt;&lt;span style="color: black"&gt; IOracleCustomTypeFactory Members&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IOracleCustomType&lt;/span&gt;&lt;span style="color: black"&gt; CreateObject()&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringArrayUDT&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #endregion&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #region&lt;/span&gt;&lt;span style="color: black"&gt; IOracleArrayTypeFactory Members&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; System.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array&lt;/span&gt;&lt;span style="color: black"&gt; CreateArray(&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; numElems)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&lt;span style="color: black"&gt;[numElems];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&lt;span style="color: black"&gt; System.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array&lt;/span&gt;&lt;span style="color: black"&gt; CreateStatusArray(&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt; numElems)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;OracleUdtStatus&lt;/span&gt;&lt;span style="color: black"&gt;[numElems];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;    #endregion&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Once all of this gets created, you can add your class as a parameter directly to an OracleCommand object for an SP.&amp;#160; But after doing all that work, with all of it’s custom code, my co-worker showed me a better way for this example, done entirely in Oracle.&amp;#160; The bulk of the work is done in this SplitByChar function:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;FUNCTION SPLITBYCHAR&lt;br /&gt;  &lt;br /&gt;(&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; p_list varchar2,&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; p_del varchar2 := ','&lt;br /&gt;  &lt;br /&gt;) return split_tbl pipelined&lt;br /&gt;  &lt;br /&gt;is&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; l_idx&amp;#160;&amp;#160;&amp;#160; pls_integer;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; l_list&amp;#160;&amp;#160;&amp;#160; varchar2(32767) := p_list;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; l_value&amp;#160;&amp;#160;&amp;#160; varchar2(32767);&lt;br /&gt;  &lt;br /&gt;begin&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; loop&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; l_idx := instr(l_list,p_del);&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if l_idx &amp;gt; 0 then&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pipe row(substr(l_list,1,l_idx-1));&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; l_list := substr(l_list,l_idx+length(p_del));&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pipe row(l_list);&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; exit;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end if;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; end loop;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return;&lt;br /&gt;  &lt;br /&gt;END SPLITBYCHAR;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And then our Test Function becomes this:&lt;/p&gt;&lt;br /&gt;create or replace &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PROCEDURE TEST_ARRAY &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;( &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160; IN_MODELS IN varchar2, &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160; OUT_MODELS OUT SYS_REFCURSOR &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;) AS &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BEGIN &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160; OPEN OUT_MODELS FOR &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SELECT * from Items WHERE id IN (SELECT * FROM table(SPLITBYCHAR(IN_MODELS))); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;END TEST_ARRAY;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Where IN_MODELS is a csv string.&amp;#160; This puts a little more work on the Oracle database, but is much better on the application side of things.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-8770008853922312434?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/8770008853922312434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=8770008853922312434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8770008853922312434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8770008853922312434'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2010/11/string-array-udt-for-oracle-and.html' title='String Array UDT for Oracle, and Something Better'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-2995862819679126631</id><published>2010-10-19T11:18:00.006-04:00</published><updated>2010-10-19T11:34:17.111-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Creating a ToDictionaryList Extension</title><content type='html'>&lt;h4&gt;ToDictionary&lt;/h4&gt;  &lt;p&gt;.Net 3.5 introduced the &lt;a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.todictionary.aspx"&gt;Enumerable.ToDictionary&lt;/a&gt; Method.  It allows you to take a list of items, and convert them into a dictionary based on some key given as a lambda expression.  For example, this code snippet for &lt;a href="http://www.sliver.com/dotnet/snippetcompiler/"&gt;Snippet Compiler&lt;/a&gt; will put a weeks worth of dates into a Dictionary&amp;lt;int,DateTime&amp;gt;, so you could do a dictionary lookup by day:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;&lt;span style="color: #010001"&gt;RunSnippet&lt;/span&gt;&lt;span style="color: black"&gt;()&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;2228&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;3&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;22&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;();&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;3&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;4&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;5&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;6&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;dayByDay&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionary&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt; =&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Day&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;dayKeyValue &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;dayByDay&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #010001"&gt;WL&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;dayKeyValue&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Key&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #a31515"&gt;" "&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;dayKeyValue&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Which results in this output:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;&lt;br /&gt;22 3/22/2228 12:00:00 AM&lt;br /&gt;23 3/23/2228 12:00:00 AM   &lt;br /&gt;24 3/24/2228 12:00:00 AM    &lt;br /&gt;25 3/25/2228 12:00:00 AM    &lt;br /&gt;26 3/26/2228 12:00:00 AM    &lt;br /&gt;27 3/27/2228 12:00:00 AM    &lt;br /&gt;28 3/28/2228 12:00:00 AM    &lt;br /&gt;Press any key to continue...&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;ToDictionaryList&lt;/h4&gt;&lt;br /&gt;But what if the key you want to use, is not unique?  You’ll end up getting this warning:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;&lt;br /&gt;System.ArgumentException: An item with the same key has already been added.    &lt;br /&gt;   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)   &lt;br /&gt;   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)    &lt;br /&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I had this same issue and decided to create a ToDictionaryList() extension method that would return a Dictionary&amp;lt;key,List&amp;lt;item&amp;gt;&amp;gt;.  Here is an example using the ToDictionaryList() grouping the dateTimes by day:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;&lt;span style="color: #010001"&gt;RunSnippet&lt;/span&gt;&lt;span style="color: black"&gt;()&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;2228&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;3&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;22&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;();&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddHours&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddMinutes&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddHours&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;26&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;results&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionaryList&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt; =&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Day&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;result &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;results&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;item &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;result&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;       {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: #010001"&gt;WL&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;result&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Key&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #a31515"&gt;" "&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;item&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Which results in this output:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;&lt;br /&gt;22 3/22/2228 12:00:00 AM   &lt;br /&gt;22 3/22/2228 1:00:00 AM   &lt;br /&gt;22 3/22/2228 12:01:00 AM   &lt;br /&gt;23 3/23/2228 12:00:00 AM&lt;br /&gt;23 3/23/2228 2:00:00 AM   &lt;br /&gt;Press any key to continue...&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Basically it is two dictionary entries, one for the 22nd which is a List&amp;lt;DateTime&amp;gt; of 3 DateTimes, and one for the 23, which contains two items.  You can even write a lambda expression for the type of item to be in the list.  So in the last example, if you changed "&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;results&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionaryList&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt; =&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Day&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;/span&gt;&lt;/span&gt;" to "&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;results&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;items&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionaryList&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt; =&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Day&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt; =&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;d&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Hour&lt;/span&gt;&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;/span&gt;" item would in int and which would result in this output:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;&lt;br /&gt;22 0  &lt;br /&gt;22 1    &lt;br /&gt;22 0    &lt;br /&gt;23 0    &lt;br /&gt;23 2    &lt;br /&gt;Press any key to continue...&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h4&gt;The Code&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Here is the code required to make the ToDictionaryList Possible:&lt;/p&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;public static class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Extensions&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;private static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TElement, TElement&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;Instance&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;TElement&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;()&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;return delegate&lt;/span&gt;&lt;span style="color: black"&gt;(TElement &lt;/span&gt;&lt;span style="color: #010001"&gt;x&lt;/span&gt;&lt;span style="color: black"&gt;) { &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;x&lt;/span&gt;&lt;span style="color: black"&gt;; };&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TKey, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource&amp;gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionaryList&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;TSource&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;TKey&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;source&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource, TKey&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;keySelector&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;source&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionaryList&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;keySelector&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;Instance&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource&amp;gt;());&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TKey, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TElement&amp;gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;ToDictionaryList&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;TSource&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;TKey&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;TElement&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;source&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource, TKey&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;keySelector&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TSource, TElement&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;elementSelector&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TKey, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TElement&amp;gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;dictionary&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TKey, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TElement&amp;gt;&amp;gt;();&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TElement&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;elements&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (TSource &lt;/span&gt;&lt;span style="color: #010001"&gt;local &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;source&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;       {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (!&lt;/span&gt;&lt;span style="color: #010001"&gt;dictionary&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;TryGetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;keySelector&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;local&lt;/span&gt;&lt;span style="color: black"&gt;), &lt;/span&gt;&lt;span style="color: blue"&gt;out &lt;/span&gt;&lt;span style="color: #010001"&gt;elements&lt;/span&gt;&lt;span style="color: black"&gt;))&lt;br /&gt;           {&lt;br /&gt;               &lt;/span&gt;&lt;span style="color: #010001"&gt;elements&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;TElement&amp;gt;();&lt;br /&gt;               &lt;/span&gt;&lt;span style="color: #010001"&gt;dictionary&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;keySelector&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;local&lt;/span&gt;&lt;span style="color: black"&gt;), &lt;/span&gt;&lt;span style="color: #010001"&gt;elements&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;           }&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: #010001"&gt;elements&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;elementSelector&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;local&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;dictionary&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The Instance Method is used to return a delegate function that returns a single item of the given type (Basically a (c =&amp;gt; c)).  The ToDictionaryList() will loop through all items in the list, adding them to a new list if the key doesn’t already exist in the dictionary, or add the item to the already existing list in the dictionary.  Pretty simple really. &lt;/p&gt;&lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/_1AY4D3VAIsg/TL22txc-QvI/AAAAAAAAAGU/efX8HL-kVKk/wlEmoticon-smile%5B2%5D.png?imgmax=800" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-2995862819679126631?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/2995862819679126631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=2995862819679126631' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/2995862819679126631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/2995862819679126631'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2010/10/creating-todictionarylist-extension.html' title='Creating a ToDictionaryList Extension'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_1AY4D3VAIsg/TL22txc-QvI/AAAAAAAAAGU/efX8HL-kVKk/s72-c/wlEmoticon-smile%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-2167836640011864440</id><published>2010-05-05T10:23:00.003-04:00</published><updated>2010-05-05T11:09:15.059-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualStudio'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Correctly Creating Classes Using xsd.exe</title><content type='html'>&lt;p&gt;Not a lot of people are familiar with the xsd.exe that ships with Visual Studio.  It allows you to create XML/classes from XML/classes.  The following are the 4.0 xsd.exe capabilities:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;/p&gt;   &lt;dl&gt;&lt;dt&gt;XDR to XSD &lt;/dt&gt;&lt;dd&gt;Generates an XML schema from an XML-Data-Reduced schema file. XDR is an early XML-based schema format. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;XML to XSD &lt;/dt&gt;&lt;dd&gt;Generates an XML schema from an XML file. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;XSD to DataSet &lt;/dt&gt;&lt;dd&gt;Generates common language runtime &lt;strong&gt;DataSet&lt;/strong&gt; classes from an XSD schema file. The generated classes provide a rich object model for regular XML data. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;XSD to Classes &lt;/dt&gt;&lt;dd&gt;Generates runtime classes from an XSD schema file. The generated classes can be used in conjunction with System.Xml.Serialization.XmlSerializer to read and write XML code that follows the schema. &lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;Classes to XSD &lt;/dt&gt;&lt;dd&gt;Generates an XML schema from a type or types in a runtime assembly file. The generated schema defines the XML format used by &lt;strong&gt;System.Xml.Serialization.XmlSerializer&lt;/strong&gt;.&lt;/dd&gt;&lt;/dl&gt;    &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It I’m a big fan of using xml schemas (XSDs) to generate classes that can be used to serialize and deserialize objects to and from XML (the XSD to Classes functionality listed above).  If your schema changes, just rerunning xsd.exe for the correct schema updates the classes.  No manually changes have to be made, including serialization code.  It’s a beautiful thing.  The problem has been, how do you set up your classes to automatically recompile with changes to the schema, and how do you deal with schemas that import other schemas?&lt;/p&gt;  &lt;h4&gt; &lt;/h4&gt;  &lt;h4&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4&gt;XSDs Importing other XSDs&lt;/h4&gt;  &lt;p&gt;A common issue that developers of XSDs run into is violating the DRY principle repeatedly with XSD types.  For example, let’s say you create a calendar meeting request service that has two XSDs, one for the request XML and one for the response XML.  You’ve defined a xs:complexType “Meeting” that includes the date and location:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Meeting&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Location&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;xs:string&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Date&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;xs:date&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;But you want to use it in both the request and the response XML.  You could just copy and past it into both XSD files, and it will validate just fine, but if you use xsd.exe to generate your classes, it’s going to create two classes of type Meeting, which will cause a compiler error.  You could have a separate namespace for each class, but then you’re definitely violating DRY.  The answer is to place the Meeting type in a separate XSD and then reference it from both your request and your response XSD.  This results in the XSDs below&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;C:\Solution\Project\Types.xsd&lt;br /&gt;&lt;span class="Apple-style-span"   style="  white-space: pre; font-family:monospace;font-size:small;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:maroon;"&gt;xml &lt;/span&gt;&lt;span style="color:#008080;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;1.0&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;utf-8&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:schema &lt;/span&gt;&lt;span style="color:#008080;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Types&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;targetNamespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;qualified&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns:mstns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns:xs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Meeting&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Location&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;xs:string&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Date&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;xs:date&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:schema&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;C:\Solution\Project\Request.xsd&lt;br /&gt;&lt;span class="Apple-style-span"   style="  white-space: pre; font-family:monospace;font-size:small;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:maroon;"&gt;xml &lt;/span&gt;&lt;span style="color:#008080;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;1.0&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;utf-8&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:schema &lt;/span&gt;&lt;span style="color:#008080;"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;qualified&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns:xs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns:myTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:import &lt;/span&gt;&lt;span style="color:#008080;"&gt;namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;schemaLocation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Types.xsd&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Request&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;RqstMeeting&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;myTypes:Meeting&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;RqstName&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;xs:string&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:schema&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;C:\Solution\Project\Response.xsd&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:maroon;"&gt;xml &lt;/span&gt;&lt;span style="color:#008080;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;1.0&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;utf-8&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:schema &lt;/span&gt;&lt;span style="color:#008080;"&gt;elementFormDefault&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;qualified&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns:xs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.w3.org/2001/XMLSchema&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns:myTypes&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:import &lt;/span&gt;&lt;span style="color:#008080;"&gt;namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;http://www.Example.com/Types&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;schemaLocation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Types.xsd&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Response&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;Accepted&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;xs:boolean&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element &lt;/span&gt;&lt;span style="color:#008080;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;AlternateMeeting&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;myTypes:Meeting&lt;/span&gt;&lt;span style="color:blue;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;minOccurs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:blue;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:sequence&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:complexType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:element&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;xs:schema&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;Now we’ve defined our Meeting type in one file, and reused it in both our Request.xsd and Response.xsd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;h4&gt;Getting xsd.exe To Import XSDs&lt;/h4&gt;&lt;p&gt;Now that the type has been defined in another file, the xsd.exe will generate this error if you attempt to create the create the Request XML:&lt;/p&gt;&lt;p&gt;C:\Solution\Project&amp;gt;xsd.exe Request.xsd /c&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Schema validation warning: Type '&lt;a href="http://www.example.com/Types:Meeting'"&gt;http://www.Example.com/Types:Meeting'&lt;/a&gt; is not declared. &lt;/p&gt;&lt;p&gt;Warning: Schema could not be validated. Class generation may fail or may produce incorrect results. &lt;/p&gt;&lt;p&gt;Error: Error generating classes for schema 'C:\Solution\Projects\Request'.&lt;br /&gt;&lt;br /&gt;- The datatype '&lt;a href="http://www.example.com/Types:Meeting'"&gt;http://www.Example.com/Types:Meeting'&lt;/a&gt; is missing. &lt;/p&gt;&lt;p&gt;If you would like more help, please type "xsd /?".&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This is due to the fact that the xsd.exe does not use the schemaLocation hint to find the imported schema.  You’ve got to include it as a parameter. in your xsd.exe call:&lt;/p&gt;&lt;p&gt;C:\Solution\Project&amp;gt;xsd.exe Types.xsd Request.xsd /c&lt;/p&gt;&lt;p&gt;This will generate one file call Request.cs that has a Request class, and a Meeting class.  Now we just need to create the Response class and we’re good to go.  But wait… running “C:\Solution\Project&amp;gt;xsd.exe Types.xsd Response.xsd /c” will create a different file, Response.cs, that contains a Response class and a duplicate Meeting class.  Now we’re stuck with another compiler error and no longer DRY.&lt;/p&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;&lt;h4&gt;Getting xsd.exe To Not Create Duplicate Classes&lt;/h4&gt;&lt;p&gt;This is a simple fix, but it took me a long time to figure out.  You have to use xsd.exe to compile all of your classes at once, so rather than running two separate commands, you just need to run one:&lt;/p&gt;&lt;p&gt;C:\Solution\Project&amp;gt;xsd.exe Types.xsd Request.xsd Response.xsd /c&lt;/p&gt;&lt;p&gt;Now you have one file, Response.xsd, with all three classes in it.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;Getting Visual Studio 2010 To Auto Recompile XSD Generated Classes&lt;/h4&gt;&lt;p&gt;Using the Project Build Events, you can set the project to always recompile the XSD classes each time you build the project.  It is also helpful to rename the file so it isn’t always the name of the last XSD file passed to xsd.exe.  Here are the Pre-build event command line values required to auto build the XSD classes and rename the file to XsdGeneratedClasses.cs:&lt;/p&gt;&lt;p&gt;"$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\@InstallationFolder)\bin\NETFX 4.0 Tools\xsd.exe" "$(ProjectDir)Request.xsd" "$(ProjectDir)Response.xsd" "$(ProjectDir)Types.xsd" /c /o:"$(ProjectDir)"&lt;br /&gt;move "$(ProjectDir)Types.cs" "$(ProjectDir)XsdGeneratedClasses.cs"&lt;/p&gt;&lt;br /&gt;Now whenever the project get’s built, the XSD generated classes will always be rewritten by xsd.exe&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Extending XSD Generated Classes&lt;/h4&gt;&lt;p&gt;Don’t forget that classes created by xsd.exe are all partial classes.  It’s a good idea to add default constructors and logic in a separate partial class in a different file.  It’s especially helpful for initializing arrays since xsd.exe generated classes use arrays and not ArrayLists or Generic Lists.  This allows you to add logic, that won’t be changed when the class is regenerated.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Serializing/Deserializing XSD Generated Classes&lt;/h4&gt;&lt;div&gt;Now your code for Serializing and Deserializing your objects is as simple as this:&lt;/div&gt;&lt;div&gt;To Serialize:&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;XmlSerializer &lt;/span&gt;&lt;span style="color:#010001;"&gt;s&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;XmlSerializer&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Request&lt;/span&gt;&lt;span style="color:black;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;IO&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextWriter &lt;/span&gt;&lt;span style="color:#010001;"&gt;w&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;IO&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StreamWriter&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;@"C:\Request.xml"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;s&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Serialize&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;w&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Request&lt;/span&gt;&lt;span style="color:black;"&gt;());&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;w&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Close&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To Deserialize:&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: #2b91af"&gt;XmlSerializer &lt;/span&gt;&lt;span style="color: #010001"&gt;s&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlSerializer&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Request&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Request &lt;/span&gt;&lt;span style="color: #010001"&gt;request&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IO&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TextReader &lt;/span&gt;&lt;span style="color: #010001"&gt;r&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IO&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;request.xml&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;request&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Request&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;s&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Deserialize&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;r&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;r&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Close&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #c0c0c0"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-2167836640011864440?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/2167836640011864440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=2167836640011864440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/2167836640011864440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/2167836640011864440'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2010/05/correctly-creating-classes-using-xsdexe.html' title='Correctly Creating Classes Using xsd.exe'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-7381318994447818948</id><published>2010-04-21T14:35:00.005-04:00</published><updated>2011-03-09T13:26:22.523-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VisualStudio'/><title type='text'>How To Configure AllMargins Extension For Visual Studio 2010</title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;UPDATE: Removed non AllMargins registry settings.  Thanks David Pugh for letting me know.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;UPDATE 2: &lt;a href="http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef/"&gt;Productivity Power Tools&lt;/a&gt; now combines most of the major features of AllMargins, due to David Pugh himself porting it over.  Consider using it instead.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/465a0d53-5133-4edd-a0cd-94484fe3d853" target="_blank"&gt;AllMargins&lt;/a&gt; is a VS 2010 extension that basically replaces &lt;a href="http://www.hanselman.com/blog/IntroducingRockScroll.aspx" target="_blank"&gt;Rockscroll&lt;/a&gt; from VS2005 and VS2008.  It combines multiple extensions into one “All” inclusive extension.  Here is an example of what mine looks like with a few features pointed out:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1AY4D3VAIsg/S89FeJvkw1I/AAAAAAAAAFI/S0646-aAkhg/s1600-h/image%5B9%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="426" alt="image" src="http://lh4.ggpht.com/_1AY4D3VAIsg/S89Fe2-pBLI/AAAAAAAAAFM/ZAoQLBE7FnU/image_thumb%5B5%5D.png?imgmax=800" width="726" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;It looks pretty good now, but when you first install it, it is configured for a white background, rather than black.  You can change the colors via the registry at &lt;strong&gt;\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Text Editor&lt;/strong&gt;, but I couldn’t find any documentation online as to what color controls what.  I downloaded the code from &lt;a href="http://code.msdn.microsoft.com/OverviewMargin/Release/ProjectReleases.aspx?ReleaseId=3957" target="_blank"&gt;code.msn.microsoft.com&lt;/a&gt; and discovered how it all worked.  &lt;/p&gt;  &lt;h4&gt;AllMargin Extensions&lt;/h4&gt;  &lt;p&gt;AllMargins contains multiple extensions, but all of their configurable settings are located in the registry at &lt;strong&gt;\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Text Editor&lt;/strong&gt;. I’ve listed them by extension below along with the introduction and usage text I’ve pulled together from the readme files in the projects.  Just edit the appropriate registry setting and open up a new window in VS2010, to see any changes you’ve made.&lt;/p&gt;  &lt;h5&gt;CaretMargin&lt;/h5&gt;  &lt;p&gt;This extension adds a margin to the OverviewMargin that shows the location of the caret and all words that match the word the caret is on.&lt;/p&gt;  &lt;p&gt;You will see colored rectangles drawn that correspond to the location of the caret and all words that match the word the caret is in or adjacent to.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="793" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;Registry Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="591"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="205"&gt;CaretMargin/MarginEnabled&lt;/td&gt;        &lt;td valign="top" width="586"&gt;Should the CaretMargin be displayed&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="210"&gt;CaretMargin/MarginWidth&lt;/td&gt;        &lt;td valign="top" width="582"&gt;Width of the CaretMargin (in pixels)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="214"&gt;CaretMargin/CaretColor&lt;/td&gt;        &lt;td valign="top" width="578"&gt;Color used to draw the location of the caret. Not used if Alpha = 0&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="218"&gt;CaretMargin/MatchColor&lt;/td&gt;        &lt;td valign="top" width="574"&gt;Color used to draw the location of matching words. Not used if Alpha = 0&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;&lt;br /&gt; &lt;h5&gt;OverviewMarginImpl&lt;/h5&gt;  &lt;p&gt;This extension creates a margin displayed along the right edge of the editor. It, like the vertical scroll bar, logically maps to the entire file. By default, it acts as if all elided regions are expanded (though the portions of the file contained in a elided regions are highlighted). The OverviewMargin also can highlights the portions of the file that are above, contained in and below the text shown in the editor. &lt;/p&gt;  &lt;p&gt;The OverviewMargin is a container for other margins (that all use a common mapping between a location on the screen and a position in the file). This extension includes two of these contained margins: the OverviewChangeTracking margin (which acts like the change tracking margin from the left side of the editor, but applied to the entire file) and the OverviewMark margin (which allows 3rd parties to draw colored marks to indicate positions of interest in the file).&lt;/p&gt;  &lt;p&gt;Moving the mouse into the OverviewMargin will, after a brief delay, show a tooltip. The default tip for the OverviewMargin shows the contents of the file at the corresponding location but other margins contained in the OverviewMargin may provide more interesting tips. &lt;/p&gt;  &lt;p&gt;Left clicking in the OverviewMargin to scroll to center the corresponding location in the editor. Left clicking in an elided region will center the(collapsed) elided region in the editor. &lt;/p&gt;  &lt;p&gt;Double-left-clicking in the OverviewMargin will expand any elided regions that contain the corresponding location and then center that location in the editor. &lt;/p&gt;  &lt;p&gt;Right-clicking in the OverviewMargin brings up an option menu that allow you to change:   &lt;br /&gt;    Whether or not the OverviewMargin acts as if all elided regions are expanded (if they are not, then the OverviewMargin uses the same mapping between a location in the margin and a position in the file as the vertical scroll bar).    &lt;br /&gt;Whether or not the OverviewMargin will show the default tip when the mouse is inside the margin.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="800" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="326"&gt;&lt;strong&gt;Registry Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="474"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMargin/ChangeTrackingMarginEnabled&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Should the change tracking margin be displayed&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMargin/MarkMarginEnabled&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Should the mark margin be displayed&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMargin/ExpandElisionsInOverviewMargin&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Are elisions expended in the overview margin?&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMargin/OverviewMarginPreviewSize&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Number of lines to show in the default tip for the overview margin. If 0, do not show any tip by default&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMarginImpl/ChangeTrackingMarginWidth&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Width of the ChangeTrackingMargin (in pixels)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMarginImpl/MarkMarginWidth&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Width of the MarkMargin (in pixels)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMarginImpl/ElisionColor&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Color used to highlight elided text as ARGB. Not used if Alpha = 0.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMarginImpl/OffScreenColor&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Color used to highlight portions of the file not shown in the editor as ARGB. Not used if Alpha = 0.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="326"&gt;OverviewMarginImpl/VisibleColor&lt;/td&gt;        &lt;td valign="top" width="474"&gt;Color used to highlight portions of the file shown in the editor as ARGB. Not used if Alpha = 0.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;&lt;br /&gt; &lt;h5&gt;Structure Adornment&lt;/h5&gt;  &lt;p&gt;This extension displays vertical lines in the editor to help show the block structure of the code file. Different colors are used to indicate different types of blocks.&lt;/p&gt;  &lt;p&gt;Moving the mouse over one of the colored lines will, if the line extends off the top of the editor, create a tooltip at the top of the view that provides some context on what is out of view.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="800" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="247"&gt;&lt;strong&gt;Registry Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="553"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="247"&gt;StructureAdornment/ClassColor&lt;/td&gt;        &lt;td valign="top" width="553"&gt;Color used to show the scope of class definitions as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="247"&gt;StructureAdornment/ConditionalColor&lt;/td&gt;        &lt;td valign="top" width="553"&gt;Color used to show the scope of conditionally executed code as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="247"&gt;StructureAdornment/LoopColor&lt;/td&gt;        &lt;td valign="top" width="553"&gt;Color used to show the scope of loop bodies as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="247"&gt;StructureAdornment/MethodColor&lt;/td&gt;        &lt;td valign="top" width="553"&gt;Color used to show the scope of method bodies as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="247"&gt;StructureAdornment/UnknownColor&lt;/td&gt;        &lt;td valign="top" width="553"&gt;Color used to show the scope of unknown blocks as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="247"&gt;StructureAdornment/Enabled&lt;/td&gt;        &lt;td valign="top" width="553"&gt;Should the structure adornments be shown?&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;&lt;br /&gt; &lt;h5&gt;StructureMargin&lt;/h5&gt;  &lt;p&gt;This extension adds a margin to the OverviewMargin that shows the block structure of the code file. Different colors are used to indicate different types of blocks.&lt;/p&gt;  &lt;p&gt;Moving the mouse over the structure margin will create a tooltip that provides some context on what is in the file at that location.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="800" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="252"&gt;&lt;strong&gt;Registry Name&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="548"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/ClassColor&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Color used to show the scope of class definitions as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/ConditionalColor&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Color used to show the scope of conditionally executed code as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/LoopColor&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Color used to show the scope of loop bodies as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/MethodColor&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Color used to show the scope of method bodies as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/UnknownColor&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Color used to show the scope of unknown blocks as ARGB&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/MarginEnabled&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Should the StructureMargin be displayed&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/MarginWidth&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Width of the StructureMargin (in pixels)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="252"&gt;StructureMargin/MethodEllipseColor&lt;/td&gt;        &lt;td valign="top" width="548"&gt;Color used to draw the ellipse that shows the scope of method bodies as ARGB. Not used if Alpha = 0&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;&lt;br /&gt; &lt;h4&gt;My Settings&lt;/h4&gt;  &lt;p&gt;Here are my setting that I use.  If you want to use them, just save them as a .reg file to add/update them in the registry&lt;/p&gt;  &lt;br /&gt;&lt;p&gt;Windows Registry Editor Version 5.00&lt;br /&gt;[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Text Editor]   &lt;br /&gt;"StructureAdornment/ClassColor"="#FF5F7D7C"    &lt;br /&gt;"StructureAdornment/ConditionalColor"="#FF005300"    &lt;br /&gt;"StructureAdornment/LoopColor"="#FFFF0000"    &lt;br /&gt;"StructureAdornment/MethodColor"="#FF222290"    &lt;br /&gt;"StructureAdornment/UnknownColor"="#FF362844"    &lt;br /&gt;"StructureAdornment/Enabled"="True"    &lt;br /&gt;"OverviewMargin/ExpandElisionsInOverviewMargin"="True"    &lt;br /&gt;"OverviewMargin/PreviewSize"="20"    &lt;br /&gt;"OverviewMarginImpl/ElisionColor"="#404252FF"    &lt;br /&gt;"OverviewMarginImpl/OffScreenColor"="#FF000000"    &lt;br /&gt;"OverviewMarginImpl/VisibleColor"="#88444444"    &lt;br /&gt;"OverviewMargin/ChangeTrackingMarginEnabled"="True"    &lt;br /&gt;"OverviewMarginImpl/ChangeTrackingMarginWidth"="9"    &lt;br /&gt;"OverviewMargin/MarkMarginEnabled"="True"    &lt;br /&gt;"OverviewMarginImpl/MarkMarginWidth"="8"    &lt;br /&gt;"CaretMargin/Enabled"="True"    &lt;br /&gt;"CaretMargin/CaretColor"="#AADDFFFF"    &lt;br /&gt;"CaretMargin/MatchColor"="#FF6F8474"    &lt;br /&gt;"CaretMargin/MarginWidth"="7"    &lt;br /&gt;"StructureMargin/MarginEnabled"="True"    &lt;br /&gt;"StructureMargin/MarginWidth"="25"    &lt;br /&gt;"StructureMargin/MethodEllipseColor"="#20DDDDDD"    &lt;br /&gt;"StructureMargin/ClassColor"="#FF38E4DB"    &lt;br /&gt;"StructureMargin/ConditionalColor"="#FFAF22C8"    &lt;br /&gt;"StructureMargin/LoopColor"="#FF0AC034"    &lt;br /&gt;"StructureMargin/MethodColor"="#FFE86D0E"    &lt;br /&gt;"StructureMargin/UnknownColor"="#FFE8DE1B"&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-7381318994447818948?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/7381318994447818948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=7381318994447818948' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7381318994447818948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7381318994447818948'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2010/04/how-to-configure-allmargins-extension.html' title='How To Configure AllMargins Extension For Visual Studio 2010'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_1AY4D3VAIsg/S89Fe2-pBLI/AAAAAAAAAFM/ZAoQLBE7FnU/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-3784888928752081990</id><published>2010-02-04T12:55:00.001-05:00</published><updated>2010-02-04T12:57:44.034-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Service'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Testing a Windows Service From Within Visual Studio</title><content type='html'>&lt;p&gt;When working with Windows Services, you can’t set the windows service project as the “Startup Project” and start debugging.  You get a Windows Service Start Failure dialog box telling you that you "Cannot start service from the command line or a debugger.  A Windows Service must first be installed (using installutil.exe) and then started with the Server Explorer, Windows Services Administrative tool or the Net Start Command.&lt;/p&gt;  &lt;p&gt;In order to get around this issue, a common approach I’ve seen is to add a windows form to the windows service project, and then in the project’s Program.Main() method, comment out the ServiceBase.Run() and add this code to run the windows form instead:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;EnableVisualStyles&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;SetCompatibleTextRenderingDefault&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TestForm&lt;/span&gt;&lt;span style="color:black;"&gt;());     &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;This will result in your TestForm running instead of your actual service and you can add whatever features that you want to the TestForm Form to be able to debug your service (IMHO it’s also good to add some cleanup functionality to this test form, like reprocess transaction 9999).  If the Windows Service ever needs to be rebuilt, the changes to Program.cs have to be reverted.  The result is a Program.cs file that get checked into source control looking like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;///&lt;/span&gt;&lt;span style="color:#00a400;"&gt; The main entry point for the application.&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;&lt;span style="color:#010001;"&gt;Main&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;[] &lt;/span&gt;&lt;span style="color:#010001;"&gt;ServicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;// More than one user Service may run within the same process. To add&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;// another service to this process, change the following line to&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;// create a second service object. For example,&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//   ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#010001;"&gt;ServicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;[] { &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Service&lt;/span&gt;&lt;span style="color:black;"&gt;() };&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;ServicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//Application.EnableVisualStyles();&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//Application.SetCompatibleTextRenderingDefault(false);&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//Application.Run(new TestForm());   &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;and being changed to look like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;///&lt;/span&gt;&lt;span style="color:#00a400;"&gt; The main entry point for the application.&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;&lt;span style="color:#010001;"&gt;Main&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;[] &lt;/span&gt;&lt;span style="color:#010001;"&gt;ServicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;// More than one user Service may run within the same process. To add&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;// another service to this process, change the following line to&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;// create a second service object. For example,&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//   ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#010001;"&gt;ServicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;[] { &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Service&lt;/span&gt;&lt;span style="color:black;"&gt;() };&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:green;"&gt;//ServiceBase.Run(ServicesToRun);&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;EnableVisualStyles&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;SetCompatibleTextRenderingDefault&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TestForm&lt;/span&gt;&lt;span style="color:black;"&gt;());   &lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;font-size:130%;"&gt;&lt;span class="Apple-style-span"  style=" white-space: normal;font-size:16px;"&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span"  style="white-space: pre; font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;whenever it needs to be ran in Visual Studio.  This can become really annoying if you’re doing this multiple times a day on different services, or your source control provider doesn’t support multiple simultaneous checkouts.  It can be even worse if the build for the service takes a long time, and you forget to comment/uncomment the right lines, and there is always the risk that you check in the Windows Form version of the service.&lt;/p&gt;&lt;p&gt;So, because I’m a lazy programmer (If I have to do something twice, that’s one too many times) I figured out a solution utilizing the System.Diagnostics.Debugger.IsAttached property.  I created a simple static class with a static constructor that accepts two parameters.  One for the services that should be ran if we aren’t starting this in Visual Studio, and another for the Windows Form Type to use as the test form if debugging.  It ended up looking like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceApplication&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;///&lt;/span&gt;&lt;span style="color:#00a400;"&gt; Deteremines if the service is being ran in debug mode.&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;///&lt;/span&gt;&lt;span style="color:#00a400;"&gt; If it is, the testFormType is ran, if not, the service is started normally&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;param name="servicesToRun"&amp;gt;&lt;/span&gt;&lt;span style="color:#00a400;"&gt;The services to run&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;param name="testFormType"&amp;gt;&lt;/span&gt;&lt;span style="color:#00a400;"&gt;The Form type that is the test form for the service&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;[] &lt;/span&gt;&lt;span style="color:#010001;"&gt;servicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;&lt;span style="color:#010001;"&gt;testFormType&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Diagnostics&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Debugger&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;IsAttached&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;      {&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;EnableVisualStyles&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;SetCompatibleTextRenderingDefault&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;false&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Form &lt;/span&gt;&lt;span style="color:#010001;"&gt;testForm&lt;/span&gt;&lt;span style="color:black;"&gt; = (&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Form&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Activator&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;CreateInstance&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;testFormType&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;testForm&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;      }&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:blue;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;        {&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;servicesToRun&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;span class="Apple-style-span"   style="font-family:Georgia, serif;font-size:130%;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px; white-space: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;And now my Program.cs looks like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;///&lt;/span&gt;&lt;span style="color:#00a400;"&gt; The main entry point for the application.&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:green;"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;&lt;span style="color:#010001;"&gt;Main&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceApplication&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Run&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ServiceBase&lt;/span&gt;&lt;span style="color:black;"&gt;[] { &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Service&lt;/span&gt;&lt;span style="color:black;"&gt;() }, &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TestForm&lt;/span&gt;&lt;span style="color:black;"&gt;));&lt;br /&gt;  }&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;No more editing the program.cs file!  It just works the way I want it to!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-3784888928752081990?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/3784888928752081990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=3784888928752081990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3784888928752081990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3784888928752081990'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2010/02/testing-windows-service-from-within.html' title='Testing a Windows Service From Within Visual Studio'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-6667642477357583517</id><published>2009-11-20T13:50:00.002-05:00</published><updated>2009-11-20T13:54:56.045-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Challenge'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Programming Challenge 2 - Falling</title><content type='html'>&lt;p&gt;After the success of &lt;a href="http://dotnetdust.blogspot.com/search/label/Programming%20Challenge"&gt;Programming Challenge 1&lt;/a&gt;  I finally present Programming Challenge 2.  The intent of this challenge is to create a program that uses multi-threading.  &lt;/p&gt;  &lt;p&gt;Here is the Challenge:&lt;/p&gt;  &lt;p&gt;Write a winform ASCII game that with these properties:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It has a game grid that is 5x5. &lt;/li&gt;    &lt;li&gt;The player should be represented as a plus sign “+” located in the second row from the top. &lt;/li&gt;    &lt;li&gt;The player is able to move the + from side to side.&lt;/li&gt;    &lt;li&gt;A row of 4 minus signs “-” and one blank space, should be randomly generated at the bottom of the 5x5 grid, and move up (giving the perception that the user is falling down). &lt;/li&gt;    &lt;li&gt;Every 1/4 of a second, the row of minuses should move up one row until it disappears off the top of the grid and another 1/4 second late, a new one will appear at the bottom. &lt;/li&gt;    &lt;li&gt;Play continues until the + sign attempts to occupy the same space as a minus sign. When this happens, the minus sign should be replaced by an “X”. This can happen by either:      &lt;ul&gt;       &lt;li&gt;falling down on top of a minus. &lt;/li&gt;        &lt;li&gt;Or moving right or left into a minus. After play ends, display a score to the player which is the number of minus rows successfully avoided. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Should look something like this when completed:&lt;/p&gt;&lt;img src="http://4.bp.blogspot.com/_1AY4D3VAIsg/SwblSNh3MXI/AAAAAAAAAA0/edDITpnfCW8/s400/Falling.jpg" style="width: 177px; height: 186px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5406260503736955250" /&gt;&lt;p&gt;And with an end game that looks like this:&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1AY4D3VAIsg/Swblzw3x5aI/AAAAAAAAAA8/TUGIvynwxuw/s1600/Falling2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 178px; height: 317px;" src="http://1.bp.blogspot.com/_1AY4D3VAIsg/Swblzw3x5aI/AAAAAAAAAA8/TUGIvynwxuw/s400/Falling2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5406261080159806882" /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;p&gt;Good luck and happy falling!&lt;/p&gt;  &lt;p&gt;* Legal Notice * These Programming Challenges&lt;/p&gt;&lt;p&gt; shall not be reproduced in any form without my express written consent.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-6667642477357583517?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/6667642477357583517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=6667642477357583517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/6667642477357583517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/6667642477357583517'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/11/programming-challenge-2-falling.html' title='Programming Challenge 2 - Falling'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1AY4D3VAIsg/SwblSNh3MXI/AAAAAAAAAA0/edDITpnfCW8/s72-c/Falling.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8402805002678571778</id><published>2009-10-24T12:47:00.001-04:00</published><updated>2009-10-24T12:47:25.486-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Challenge'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Programming Challenge 1 - Mow the Lawn - Results</title><content type='html'>&lt;p&gt;There were three projects submitted.&amp;#160; One by a brand new .Net developer, Brandon, one by a C#/Flash developer, Kyle, and another one by myself.&lt;/p&gt;  &lt;p&gt;This programming challenge presented some common problems that had to be over come like how store the grass, the position of the lawnmower, and what the grass should be after it has mowed.&amp;#160; Some solutions for these problems were extremely similar and others were surprisingly different.&lt;/p&gt;  &lt;p&gt;Brandon’s code was the shortest and the simplest taking around 120 lines of code.&amp;#160; He used a two dimensional char array to store the lawn and class level variables to store the position of the lawn mower, and what the grass under the mower is.&amp;#160; This is his code to handle the move with the other 3 directions taken out.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;&lt;span style="color: #010001"&gt;MowerForm_KeyDown&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;&lt;span style="color: #010001"&gt;sender&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;KeyEventArgs &lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;switch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;KeyCode&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Down&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;MowerY&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: red"&gt;9&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;grassArray&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;MowerY&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;MowerX&lt;/span&gt;&lt;span style="color: black"&gt;] = &lt;/span&gt;&lt;span style="color: #010001"&gt;underMower&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;MowerY&lt;/span&gt;&lt;span style="color: black"&gt;++;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;checkCutStatus&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;                    &lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #010001"&gt;PrintGrass&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;numcut&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: red"&gt;100&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;The lawn is mowed!! Daryl's mom is lathered up and waiting to congratulate you inside!&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It’s very simple, first checking to be able to move in that direction and then updating the lawn under the mower, and moving the mower.&amp;#160; His checkCutStatus() would then update underMower, and place the mower at the new location.&amp;#160; Pretty simple but I would also add an else to the if, that had a return statement.&amp;#160; That way if you couldn’t move, you wouldn’t reprint the grass.&amp;#160; Whenever a piece of grass goes from medium to short, the numcut get incremented and once all 100 are cut, the congratulations message gets displayed.&amp;#160; I would suggest at least making it a class level constant for the 100 and the 9.&amp;#160; It makes it easier to update and (numcut == AllGrass) makes more sense then (numcut == 100).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Kyle’s code was the second shortest.&amp;#160; He also used a two dimensional array but he created a Grass class that kept track of the grass type, Label, and whether it had been marked as counted.&amp;#160; Below is his move function.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;protected override bool &lt;/span&gt;&lt;span style="color: #010001"&gt;ProcessCmdKey&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Message &lt;/span&gt;&lt;span style="color: #010001"&gt;msg&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys &lt;/span&gt;&lt;span style="color: #010001"&gt;keyData&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;switch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;keyData&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Right&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;mower_location&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;X&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: #010001"&gt;lawn_width&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;mower_location&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;X&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;update_grass&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;return true&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;update_grass() keeps track of the old mower position and handles cutting the grass, moving the lawn mower, and keeping track of the previous position.&amp;#160; One of the more unique aspects of Kyle’s program is that rather than having one label with 100 squares, he has 100 labels.&amp;#160; This makes it easier and quicker to update since only the text that gets changed needs to be updated.&amp;#160; Brandon and my solution requires the entire 100 squares to be redrawn.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;My code was the longest, and with the most extra classes, but since I knew what the next programming challenge would be, I thought it would be worth it to add that additional complexity.&amp;#160; Instead of using a 2 dimensional array, I used an array of an array incase I wanted the yard to not be square. Below is my move function.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;&lt;span style="color: #010001"&gt;Form1_KeyDown&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;&lt;span style="color: #010001"&gt;sender&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;KeyEventArgs &lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;switch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;KeyCode&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Down&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Up&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Left&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Right&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Lawn&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Move&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;Mower&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;GetDirection&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;KeyCode&lt;/span&gt;&lt;span style="color: black"&gt;)))&lt;br /&gt;            {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;lblLawn&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Lawn&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;DisplayMessage&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Lawn&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IsMowed&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Have a Lemonade, you're finished!&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;DisplayMessage&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;default&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Handled&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I actually pulled out the lawn logic out of my main form in an effort to make it more MVC-ish.&amp;#160; The Lawn.Move() returns true if the object that is attempted to be moved, was move.&amp;#160; Similar to Brandon’s counting of cut grass, the Lawn class keeps track of the grass left uncut, and encapsulates it with the IsMowed property.&amp;#160; The main work of moving the mower around is handled in Lawn.Move().&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size: 85%"&gt;&lt;span style="color: blue"&gt;public static bool &lt;/span&gt;&lt;span style="color: #010001"&gt;Move&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;LawnBase &lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Direction &lt;/span&gt;&lt;span style="color: #010001"&gt;direction&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (!&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IsMovable&lt;/span&gt;&lt;span style="color: black"&gt;) { &lt;/span&gt;&lt;span style="color: blue"&gt;return false&lt;/span&gt;&lt;span style="color: black"&gt;; }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LawnBase &lt;/span&gt;&lt;span style="color: #010001"&gt;nextObject&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;GetObjectInDirection&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;direction&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;nextObject&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt; || !&lt;/span&gt;&lt;span style="color: #010001"&gt;nextObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CanMoveOver&lt;/span&gt;&lt;span style="color: black"&gt;) { &lt;/span&gt;&lt;span style="color: blue"&gt;return false&lt;/span&gt;&lt;span style="color: black"&gt;; }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;mobileObject&lt;/span&gt;&lt;span style="color: black"&gt; = ((&lt;/span&gt;&lt;span style="color: #2b91af"&gt;MoveableLawnBase&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #010001"&gt;_lawn&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Row&lt;/span&gt;&lt;span style="color: black"&gt;][&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Column&lt;/span&gt;&lt;span style="color: black"&gt;] = &lt;/span&gt;&lt;span style="color: #010001"&gt;mobileObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GroundBeneath&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #010001"&gt;mobileObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Move&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;direction&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;nextObject&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #010001"&gt;DecrementGrassCount&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;nextObject&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;mobileObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GroundBeneath&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #010001"&gt;_lawn&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Row&lt;/span&gt;&lt;span style="color: black"&gt;][&lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Column&lt;/span&gt;&lt;span style="color: black"&gt;] = &lt;/span&gt;&lt;span style="color: #010001"&gt;obj&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;return true&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There are some additional checks to see if an object can be moved over, so later if we add more objects to our yard, they’ll be able to interact nicely. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Feel free to comment:&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-8402805002678571778?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/8402805002678571778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=8402805002678571778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8402805002678571778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8402805002678571778'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/10/programming-challenge-1-mow-lawn_24.html' title='Programming Challenge 1 - Mow the Lawn - Results'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8871911659623920082</id><published>2009-10-12T09:16:00.003-04:00</published><updated>2009-10-12T09:41:02.042-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming Challenge'/><title type='text'>Programming Challenge 1 - Mow the Lawn</title><content type='html'>A friend of mine has just switched from developing in COBALT, to C#.  As a fun way to help him learn C# and to argue over better methods of programming, we decided to make little programming challenges that were designed to be short, simple and fun.  This contest is open to anyone, just feel free to e-mail me your zipped project solution and I'll post it and comment on it.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So here goes the first challenge:&lt;/div&gt;&lt;div&gt;Write a winform ASCII lawn mowing application with these properties:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;It should start with a 10x10 grid of capital "X"'s.  &lt;/li&gt;&lt;li&gt;The lawn mower should be represented by an "@" symbol, and start in the upper left hand corner.  &lt;/li&gt;&lt;li&gt;The user should be able to use the arrow keys to move the lawnmower around the lawn.  &lt;/li&gt;&lt;li&gt;The first time the lawn mower passes over an X, it gets converted to a lower case "v".&lt;/li&gt;&lt;li&gt;When the lawn mower passes over a "v", it gets converted to a ".".&lt;/li&gt;&lt;li&gt;When the entire lawn has been reduced to "."'s a message should be displayed to the user.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good luck and happy mowing!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;* Legal Notice * These Programming Challenges shall not be reproduced in any form without my express written consent. &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-8871911659623920082?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/8871911659623920082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=8871911659623920082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8871911659623920082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8871911659623920082'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/10/programming-challenge-1-mow-lawn.html' title='Programming Challenge 1 - Mow the Lawn'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-5950250172754879798</id><published>2009-07-08T09:34:00.002-04:00</published><updated>2009-07-08T09:45:25.416-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualStudio'/><title type='text'>Visual Studio Region Snippet</title><content type='html'>I like to format my regions, so the region name is at the bottom of the region, that way I don't have to scroll all the way to the top to see the next region.  I've been doing this by hand all the time, and figured it was about time for me to create a code snippet for it.&lt;div&gt;&lt;br /&gt;Using &lt;a href="http://blogs.telerik.com/kevinbabcock/posts/08-09-11/visual_studio_tip_creating_your_own_code_snippets.aspx"&gt;this&lt;/a&gt; telerick blog, I was able to see the folder that all the snippets are stored ("&amp;lt;Visual Studio installation directory&amp;gt;\VC#\Snippets\1033\Visual C#") and then the rest was easy.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:blue;"&gt;xml &lt;/span&gt;&lt;span style="color:#008080;"&gt;version&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;=&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#00bf00;"&gt;1.0&lt;/span&gt;&lt;span style="color:green;"&gt;" &lt;/span&gt;&lt;span style="color:#008080;"&gt;encoding&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;=&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#00bf00;"&gt;utf-8&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt; ?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;CodeSnippets  &lt;/span&gt;&lt;span style="color:#008080;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;=&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#00bf00;"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;CodeSnippet &lt;/span&gt;&lt;span style="color:#008080;"&gt;Format&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;=&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#00bf00;"&gt;1.0.0&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Header&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Title&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;region&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Title&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Shortcut&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;region&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Shortcut&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Description&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;Code snippet for region&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Description&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Author&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;Daryl LaBar&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Author&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;Expansion&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;SurroundsWith&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;SnippetType&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;SnippetTypes&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Header&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Snippet&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Declarations&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Literal&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ID&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;name&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;ID&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;Region name&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;     &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Default&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#2ba879;"&gt;MyRegion&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Default&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;   &amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Literal&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Declarations&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt; &amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Code &lt;/span&gt;&lt;span style="color:#008080;"&gt;Language&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;=&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#00bf00;"&gt;csharp&lt;/span&gt;&lt;span style="color:green;"&gt;"&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color:green;"&gt;#region $name$&lt;br /&gt;&lt;br /&gt;$selected$$end$&lt;br /&gt;&lt;br /&gt;#endregion // $name$&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;]]&amp;gt;&lt;br /&gt; &amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Code&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;Snippet&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:blue;"&gt;CodeSnippet&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;CodeSnippets&lt;/span&gt;&lt;span style="color:#c0c0c0;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-5950250172754879798?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/5950250172754879798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=5950250172754879798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/5950250172754879798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/5950250172754879798'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/07/visual-studio-region-snippet.html' title='Visual Studio Region Snippet'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-7277622254648815484</id><published>2009-05-27T15:31:00.008-04:00</published><updated>2010-03-23T11:27:44.486-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Yield Passes Control Through Intermediate Calls</title><content type='html'>I was wanting to be able to perform a backend database service in a batch mode, but wanted to make the actual batch processing part of it as encapsulated as possible.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I created a BO that returned an IEnumerable&amp;lt;List&amp;lt;MyBO&amp;gt;&amp;gt;, but it didn't use any yield statements, it just called a data access layer that was using the yield statements.  I was concerned if this was going to work, so I decided to test it using    &lt;a href="http://www.sliver.com/dotnet/SnippetCompiler/"&gt;snippet compiler&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So this is my quick and dirty test to see if it would work:&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public static void &lt;/span&gt;&lt;span style="color:#010001;"&gt;RunSnippet&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetAnswers&lt;/span&gt;&lt;span style="color:black;"&gt;())&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color:#010001;"&gt;WL&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Count&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;       &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:blue;"&gt;string &lt;/span&gt;&lt;span style="color:#010001;"&gt;answer &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;       {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color:#010001;"&gt;WL&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;answer&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetAnswers&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetTheAnswers&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;private static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetTheAnswers&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt;();&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"A"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"B"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"C"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"D"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:blue;"&gt;yield return &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt;();&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"D"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"C"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"B"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"A"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:blue;"&gt;yield return &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt;();&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"X"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Y"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Z"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:blue;"&gt;yield return &lt;/span&gt;&lt;span style="color:#010001;"&gt;answers&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And these were the results:&lt;br /&gt;4&lt;br /&gt;A&lt;br /&gt;B&lt;br /&gt;C&lt;br /&gt;D&lt;br /&gt;4&lt;br /&gt;D&lt;br /&gt;C&lt;br /&gt;B&lt;br /&gt;A&lt;br /&gt;3&lt;br /&gt;X&lt;br /&gt;Y&lt;br /&gt;Z&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;So even though GetAnswers() gets called once, GetTheAnswers() will return control back to the enumerating foreach multiple times.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-7277622254648815484?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/7277622254648815484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=7277622254648815484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7277622254648815484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7277622254648815484'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/05/yield-passes-control-through.html' title='Yield Passes Control Through Intermediate Calls'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8898427113883081636</id><published>2009-05-13T15:35:00.001-04:00</published><updated>2009-05-13T15:50:04.435-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Searching Through All Controls in a ControlCollection</title><content type='html'>I had a user control at work that dynamically added TextBoxes to a HtmlTable.  After figuring out how to even &lt;a href="http://dotnetdust.blogspot.com/2009/05/accessing-controls-dynamically-created.html"&gt;access the dynamic controls&lt;/a&gt;, I needed to be able to retrieve them easily.  Since the ids were based on a primary key id from the database, I couldn't determine what the ids of the TextBoxes were using the FindControl() method.  I could hit the database again to find the ids and then use the FindControl method, but I didn't like having another database hit if I could help it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What I wanted to be able to do was enumerate over all of the controls located within my user control.  After thinking about it for a bit, I decided to finally make use of the C# "yield" statement and create my own recursive iterator method:&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control&lt;/span&gt;&lt;span style="color:black;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetAllControls&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ControlCollection &lt;/span&gt;&lt;span style="color:#010001;"&gt;controls&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;{&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;&lt;span style="color:#010001;"&gt;control &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;controls&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;  {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:blue;"&gt;yield return &lt;/span&gt;&lt;span style="color:#010001;"&gt;control&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;&lt;span style="color:#010001;"&gt;childControl &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;control&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Controls.GetAllControls&lt;/span&gt;&lt;span style="color:black;"&gt;()){&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:blue;"&gt;yield return &lt;/span&gt;&lt;span style="color:#010001;"&gt;childControl&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;Now I could do a foreach against all controls within a ControlCollection, and process any TextBoxes:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Control &lt;/span&gt;&lt;span style="color:#010001;"&gt;control &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;PlaceHolder1&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Controls&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetAllControls&lt;/span&gt;&lt;span style="color:black;"&gt;())&lt;br /&gt;{&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;control&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetType&lt;/span&gt;&lt;span style="color:black;"&gt;() == &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;&lt;span style="color:black;"&gt;))&lt;br /&gt;   {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color:green;"&gt;// Do Work Here&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;I believe that this could be extremely useful and wonder why it wasn't included in .Net to begin with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-8898427113883081636?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/8898427113883081636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=8898427113883081636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8898427113883081636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8898427113883081636'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/05/searching-through-all-controls-in.html' title='Searching Through All Controls in a ControlCollection'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-3508614296948836539</id><published>2009-05-13T15:10:00.000-04:00</published><updated>2009-05-13T15:33:22.507-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>ASP.Net Control to Display Session</title><content type='html'>I wanted to be able to see all my Session data on my webpage, but only when I actually had a debugger attached.  My solution was a two step approach:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Create a user control that ouputs the session into a table&lt;/li&gt;&lt;li&gt;Add that user control to the to the page if a debugger is attached&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;To accomplish step 1, I created a user control which is located below.  It overrides the Render method, directly writing a text html table to the HtmlTextWriter.  It contains two other methods, one to create the table to display the session information in, iterating over all the values in the session, and another that uses reflection to output the value of all properties of non-simple types.  &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SessionDisplayControl&lt;/span&gt;&lt;span style="color:black;"&gt; : &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;UserControl&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#010001;"&gt;SessionDisplayControl&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;protected override void &lt;/span&gt;&lt;span style="color:#010001;"&gt;Render&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HtmlTextWriter &lt;/span&gt;&lt;span style="color:#010001;"&gt;writer&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt; {&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:blue;"&gt;base&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Render&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;writer&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#010001;"&gt;writer&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Write&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetOutputState&lt;/span&gt;&lt;span style="color:black;"&gt;());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;protected string &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetOutputState&lt;/span&gt;&lt;span style="color:black;"&gt;()&lt;br /&gt; {&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Text&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Text&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;2000&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;table border='1' align='center'&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td colspan='2'&amp;gt;There are "&lt;/span&gt;&lt;span style="color:black;"&gt; + &lt;/span&gt;&lt;span style="color:#010001;"&gt;Session&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Contents&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Count&lt;/span&gt;&lt;span style="color:black;"&gt; + &lt;/span&gt;&lt;span style="color:#a31515;"&gt;" Session variables&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:blue;"&gt;string &lt;/span&gt;&lt;span style="color:#010001;"&gt;name &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;Session&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Contents&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;     {&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Collections&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable &lt;/span&gt;&lt;span style="color:#010001;"&gt;enumeratable&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:#010001;"&gt;Session&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#010001;"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;] &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Collections&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;enumeratable&lt;/span&gt;&lt;span style="color:black;"&gt; == &lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;Session&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#010001;"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;].&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetType&lt;/span&gt;&lt;span style="color:black;"&gt;() == &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;&lt;span style="color:black;"&gt;))&lt;br /&gt;         {&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Format&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;@"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;{0}&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;{1}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;HtmlEncode&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;), &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetObjectValue&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;Session&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#010001;"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;] ?? &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;NULL&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;)));&lt;br /&gt;         }&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:blue;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;            {&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;@"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt; + &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;HtmlEncode&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;) + &lt;/span&gt;&lt;span style="color:#a31515;"&gt;@"&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;table border='1'&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:#010001;"&gt;i&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:red;"&gt;0&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:blue;"&gt;object &lt;/span&gt;&lt;span style="color:#010001;"&gt;o &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;enumeratable&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;             {&lt;br /&gt;                 &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Format&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Item({0})&amp;lt;/td&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#010001;"&gt;i&lt;/span&gt;&lt;span style="color:black;"&gt;++));&lt;br /&gt;                 &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Format&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;@"&amp;lt;td&amp;gt;{0}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetObjectValue&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;o&lt;/span&gt;&lt;span style="color:black;"&gt;)));&lt;br /&gt;             }&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;@"&amp;lt;/table&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;AppendLine&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;/table&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;private static string &lt;/span&gt;&lt;span style="color:#010001;"&gt;GetObjectValue&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Object &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt; {&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is string&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is bool&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is int&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is long&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is double&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is decimal&lt;/span&gt;&lt;span style="color:black;"&gt; || &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj &lt;/span&gt;&lt;span style="color:blue;"&gt;is &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;     {&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;HtmlEncode&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;obj&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;());&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Text&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Text&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;500&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Reflection&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;&lt;span style="color:black;"&gt;[] &lt;/span&gt;&lt;span style="color:#010001;"&gt;properties&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:#010001;"&gt;obj&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetType&lt;/span&gt;&lt;span style="color:black;"&gt;().&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetProperties&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Reflection&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PropertyInfo &lt;/span&gt;&lt;span style="color:#010001;"&gt;property &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#010001;"&gt;properties&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;     {&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:blue;"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;            {&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Append&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;HtmlEncode&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;property&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Name&lt;/span&gt;&lt;span style="color:black;"&gt;));&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Append&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;": "&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Append&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;HtmlEncode&lt;/span&gt;&lt;span style="color:black;"&gt;((&lt;/span&gt;&lt;span style="color:#010001;"&gt;property&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetValue&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;obj&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;&lt;span style="color:black;"&gt;) ?? &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;NULL&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;).&lt;/span&gt;&lt;span style="color:#010001;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;()));&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Append&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;br/&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;         }&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Exception &lt;/span&gt;&lt;span style="color:#010001;"&gt;ex&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;         {&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Append&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"ERROR: "&lt;/span&gt;&lt;span style="color:black;"&gt; + &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpUtility&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;HtmlEncode&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;ex&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Message&lt;/span&gt;&lt;span style="color:black;"&gt;) + &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"&amp;lt;br/&amp;gt;"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#010001;"&gt;sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;To accomplish step 2, all that was needed was to override the OnLoad event in my BasePage class from which all other classes in my website inherit, check for a debugger, and add my user control from step 1 to the page if one was attached.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:black;"&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;protected override void  &lt;/span&gt;&lt;span style="color:#010001;"&gt;OnLoad&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;&lt;span style="color:#010001;"&gt;e&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;   {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;base&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;OnLoad&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;e&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;       &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Diagnostics&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Debugger&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;IsAttached&lt;/span&gt;&lt;span style="color:black;"&gt; &amp;amp;&amp;amp; !&lt;/span&gt;&lt;span style="color:#010001;"&gt;IsPostBack&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;       {&lt;br /&gt;           &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Controls&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SessionDisplayControl&lt;/span&gt;&lt;span style="color:black;"&gt;());&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;Now whenever I have a debugger attached my session will be displayed at the bottom of the page.  This has helped me clean up unused session variables numerous times.  Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-3508614296948836539?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/3508614296948836539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=3508614296948836539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3508614296948836539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3508614296948836539'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/05/aspnet-control-to-display-session.html' title='ASP.Net Control to Display Session'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-3153994548233169084</id><published>2009-05-13T14:43:00.000-04:00</published><updated>2009-05-13T15:06:01.733-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Accessing Controls Dynamically Created During AJAX PartialPostBacks</title><content type='html'>I had an extremely annoying issue trying to be able to create textboxes dynamically within an AJAX UpdatePanel during on the PostBack.  Below is the code that I used to create a textbox, and added it to a TableCell.  It runs during an AJAX PartialPostback created on a DropDownList SelectedIndexChangedEvent.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;TextBox &lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextBox&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ID&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"AnswerTextBox"&lt;/span&gt;&lt;span style="color:black;"&gt; + &lt;/span&gt;&lt;span style="color:#010001;"&gt;question&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ServiceRequestQuestionId&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Attributes&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"questionid"&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#010001;"&gt;question&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ServiceRequestQuestionId&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;());&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;TextMode&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;TextBoxMode&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;MultiLine&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Style&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HtmlTextWriterStyle&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Width&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"100%"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Columns&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:red;"&gt;4&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Rows&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:red;"&gt;4&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Attributes&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"runat"&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;"server"&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerCell&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Controls&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Add&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;answerText&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;My TextBox was showing up exactly how I wanted it to, but when I'd attempt to access the textbox after the user clicked the button submit, the textbox didn't exist anywhere on my page.  After googling for a bit, it made sense to me that I had to re-add my dynamic control to my page, but what I couldn't find was how to access the answerText.Text value from the ViewState.  I finally discovered that the TextBox had to be readded during the Page_Load or Page_Init events in order to be able to access their ViewState values, and it is only after the Page_Load event finishes that the values actually become accessible, and only if you add the objects in the some location within the heirarchy, and with the same id value.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was thinking that somehow automagically I should be able to access this controls from the ViewState, and when I readded the control, it would override the value.  Boy was I wrong. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-3153994548233169084?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/3153994548233169084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=3153994548233169084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3153994548233169084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3153994548233169084'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/05/accessing-controls-dynamically-created.html' title='Accessing Controls Dynamically Created During AJAX PartialPostBacks'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8672986963493475128</id><published>2009-04-24T16:45:00.000-04:00</published><updated>2009-04-24T16:53:53.913-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows Registry Keys For Adding Register Dll/OCX Shortcut</title><content type='html'>Anyone that has ever had to deal with registering dlls knows that it is just plan annoying to have to type "regsvr32.exe" every single time you want to register a dll.  I'm a lazy programmer.  If I have to do something twice, that's once too many.  So I don't have to look all over the internet for the correct registery settings to perform this change, I'm posting it here on my blog.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Paste this text into a new text document, save it with a .reg extension, double click it, and select that "Yes" you "are sure you want to add the information in &lt;filename&gt; to the registry".  Done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\dllfile\Shell]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="Register"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\dllfile\Shell\Register]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\dllfile\Shell\Register\command]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="regsvr32.exe \"%1\""&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\dllfile\Shell\Unregister]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\dllfile\Shell\Unregister\command]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="regsvr32.exe /u \"%1\""&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\.ocx]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="ocxfile"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\ocxfile]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="OCX File"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"EditFlags"=hex:00,00,01,00&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\ocxfile\Shell]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="Register"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\ocxfile\Shell\Register]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\ocxfile\Shell\Register\command]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="regsvr32.exe \"%1\""&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\ocxfile\Shell\Unregister]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[HKEY_CLASSES_ROOT\ocxfile\Shell\Unregister\command]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@="regsvr32.exe /u \"%1\""&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-8672986963493475128?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/8672986963493475128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=8672986963493475128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8672986963493475128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8672986963493475128'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/04/windows-registry-keys-for-adding.html' title='Windows Registry Keys For Adding Register Dll/OCX Shortcut'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-3750775943080549947</id><published>2009-03-21T15:11:00.000-04:00</published><updated>2009-03-21T15:21:47.021-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>String Construtor String(Char[] value) doesn't work?</title><content type='html'>So for some reason that I can't determine I'm unable to use the New String(char[] value) function.  I tried this expression in my immediate window while debugging a Windows Mobile 6 .Net 3.5 application, and this is what I got:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;?new string(new char[]{'1'})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;A first chance exception of type 'System.InvalidOperationException' occurred in mscorlib.dll&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;'new string(new char[]{'1'})' threw an exception of type 'System.InvalidOperationException'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;    base {System.SystemException}: {"InvalidOperationException"}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I typed the same expression into a normal C# desktop app .Net 3.5 application, this is what I got:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;?new string(new char[]{'1'})&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;'new string(new char[]{'1'})' threw an exception of type 'System.ArgumentException'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;    base {System.SystemException}: {"Only NewString function evaluation can create a new string."}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;    Message: "Only NewString function evaluation can create a new string."&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 153);"&gt;    ParamName: null&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm exteremly puzzeled.  Anyone have any ideas?&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-3750775943080549947?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/3750775943080549947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=3750775943080549947' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3750775943080549947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3750775943080549947'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/03/string-construtor-stringchar-value.html' title='String Construtor String(Char[] value) doesn&apos;t work?'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-4485711033733541490</id><published>2009-02-07T22:20:00.000-05:00</published><updated>2009-02-08T09:41:15.119-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Performing Asynchronous XML Serialization</title><content type='html'>If you work at a company anything like mine, you've had to deserialize a large XML file, and been forced to sit there for the Deserialize() method to complete.  I haven't done a lot of work with threading, but I figured now was the time to start.&lt;br /&gt;&lt;br /&gt;I decided to wrap the normal System.Xml.Serialization.XmlSerializer in a generic class that would encapsulate the threading.  I also wanted it to perform some logging if there were issues during deserialization. The process starts with a factory method to return the serializer object.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: black"&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;RunDeserializeAsync&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;filePath&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;filePath&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Which immediately calls the private constructor:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: black"&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #010001"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;filePath&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;            : &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;&lt;span style="color: black"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;DeserializingDelegate&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;PeformDeserialization&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;FileSize&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileInfo&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;filePath&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;// The XML File tends to take up 110% of space in memory as it does on disc&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;FileSize&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: blue"&gt;long&lt;/span&gt;&lt;span style="color: black"&gt;)(&lt;/span&gt;&lt;span style="color: #010001"&gt;FileSize&lt;/span&gt;&lt;span style="color: black"&gt; * &lt;/span&gt;&lt;span style="color: red"&gt;1.10&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;Result&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;DeserializingDelegate&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;BeginInvoke&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;filePath&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;GetCurrentProcessMemoryInUse&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Which first marks the PerformDeserialization() method as the DeserializationDelegate. It then determines the file size that is being opened to be used later to determine the progress that is left.  For now, it only deserializes an actual file, but it could be extended with the other default constructors of the XmlSerializer.  &lt;br /&gt;&lt;br /&gt;BeginInvoke() is called on the DeserializationDelege, which starts the deserialization and returns an IAsyncResult object.  BeginInvoke() starts a new thread, and calls the assigned Delegate.  You can then query the IAsyncResult object to see if it finished, or just call EndInvoke() and your primary thread will wait until the secondary thread finishes.  &lt;br /&gt;&lt;br /&gt;Immediately after the thread is created, the current size of the process is stored to also be used later to determine the progress left.&lt;br /&gt;&lt;br /&gt;The PerformDeserialization() method is exactly what you would do if you weren't invoking it on a separate thread.  Create an XmlSerialization object,assign an Event Handler for loading issues, open a file with a StreamReader and call Deserialize().&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: #000000"&gt;        &lt;/span&gt;&lt;span style="color: #010001"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;T PeformDeserialization&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;string &lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlSerializer &lt;/span&gt;&lt;span style="color: #2b91af"&gt;xs&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;xs&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;UnknownNode&lt;/span&gt;&lt;span style="color: #000000"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;new XmlNodeEventHandler&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Xs_UnknownNode&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader &lt;/span&gt;&lt;span style="color: #2b91af"&gt;reader&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;File&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OpenText&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;xs&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Deserialize&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;reader&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Since the Deserialize() method is still synchronous, the hardest part has been coming up with a good method of determining the progress of the file load.  This is what I came up with, but if you, dear reader, have a better idea, I'd like to hear it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: black"&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;///&lt;/span&gt;&lt;span style="color: #00a400"&gt; Best guess at progress based on the size of the file, and the amount of increase in the memory of the process&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public int &lt;/span&gt;&lt;span style="color: #010001"&gt;Progress&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;Result&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IsCompleted&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: red"&gt;100&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;long &lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;GetCurrentProcessMemoryInUse&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// For Some reason, the current size of memory is smaller than the starting size plus the increase in memory usage&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// Assume it is due to some garbage collection in between calls to Progress&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// Update the starting memory size so it is equal to the current + total increase&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// This assumes that no additional memory was used to deserialize the XML&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: #010001"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)((&lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt;) / (&lt;/span&gt;&lt;span style="color: blue"&gt;double&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;FileSize&lt;/span&gt;&lt;span style="color: black"&gt; * &lt;/span&gt;&lt;span style="color: red"&gt;100&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;125&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// Must have had a bad starting point, move it back to 75%&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)(&lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: red"&gt;.75&lt;/span&gt;&lt;span style="color: black"&gt; * &lt;/span&gt;&lt;span style="color: #010001"&gt;FileSize&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// Reinitialize Total Memory&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;currentSize&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: #010001"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;75&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;100&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;99&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;tempProgress&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The first thing it does, is check the IAsyncResult object to see if it has completed, if it has, then it returns 100%.  Done.  The next part I added later when I noticed that if I opened up more than one file, the progress of the second file would move to about 25%, then it would drop down to near 0, and stay there until it finished.  I'm guessing it is due to the garbage collector collecting a large amount of memory due to the first deserialized object being release.  The basic method of determining progress is then calculated, assume that the deserialized XML, will take up nearly the same amount as the serialized, is then performed.  Get the increase in memory size since first beginning to deserialize the Xml, and divide it by the size of the file.  Then do some checking to see if the progress has grown too large, or is over a 100%.  It is not a perfect solution, but was extremely simple to implement, and serves my needs well.&lt;br /&gt;&lt;br /&gt;Below is the entire class.  Feel free to make comments.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;public class &lt;/span&gt;&lt;span style="color: #010001"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt; {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private delegate &lt;/span&gt;&lt;span style="color: #2b91af"&gt;T &lt;/span&gt;&lt;span style="color: green"&gt;Deserializer&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;string &lt;/span&gt;&lt;span style="color: #2b91af"&gt;path&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private &lt;/span&gt;&lt;span style="color: green"&gt;Deserializer &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DeserializingDelegate&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;; }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private &lt;/span&gt;&lt;span style="color: green"&gt;IAsyncResult &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Result&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;; }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private long &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;; }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private long &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;; }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private long &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileSize&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;; }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private &lt;/span&gt;&lt;span style="color: #010001"&gt;Dictionary&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlUnknowns&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;        #region&lt;/span&gt;&lt;span style="color: #000000"&gt; Public Properties&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;T Xml&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;protected set&lt;/span&gt;&lt;span style="color: #000000"&gt;;}&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;///&lt;/span&gt;&lt;span style="color: red"&gt; Best guess at progress based on the size of the file, and the amount of increase in the memory of the process&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;public int &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Progress&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Result&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IsCompleted&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;long &lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetCurrentProcessMemoryInUse&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt; + &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #00a400"&gt;// For Some reason, the current size of memory is smaller than the starting size plus the increase in memory usage&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #00a400"&gt;// Assume it is due to some garbage collection in between calls to Progress&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #00a400"&gt;// Update the starting memory size so it is equal to the current + total increase&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #00a400"&gt;// This assumes that no additional memory was used to deserialize the XML&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; - &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: #2b91af"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; - &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;int &lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;)((&lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; - &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt;) / (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;double&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileSize&lt;/span&gt;&lt;span style="color: #000000"&gt; * &lt;/span&gt;&lt;span style="color: #a31515"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;125&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #00a400"&gt;// Must have had a bad starting point, move it back to 75%&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;)(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; - &lt;/span&gt;&lt;span style="color: #a31515"&gt;.75&lt;/span&gt;&lt;span style="color: #000000"&gt; * &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileSize&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #00a400"&gt;// Reinitialize Total Memory&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;currentSize&lt;/span&gt;&lt;span style="color: #000000"&gt; - &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;75&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: #a31515"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;99&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;tempProgress&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;///&lt;/span&gt;&lt;span style="color: red"&gt; Returns true when the XML has finished being Deserialized&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;///&lt;/span&gt;&lt;span style="color: red"&gt; Returns false if it hasn't&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;public bool &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IsCompleted&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Result&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IsCompleted&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Xml&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DeserializingDelegate&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;EndInvoke&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Result&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return true&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: #2b91af"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return false&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;        #endregion &lt;/span&gt;&lt;span style="color: #00a400"&gt;// Public Properties&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;///&lt;/span&gt;&lt;span style="color: red"&gt; Returns a list of all unknown nodes found in the XML in this format&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;///&lt;/span&gt;&lt;span style="color: red"&gt; Entity Name, First Occurance Line Number, First Occurance Line Position&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;public string &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetLog&lt;/span&gt;&lt;span style="color: #000000"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;StringBuilder &lt;/span&gt;&lt;span style="color: #2b91af"&gt;sb&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;StringBuilder&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;var &lt;/span&gt;&lt;span style="color: #2b91af"&gt;item &lt;/span&gt;&lt;span style="color: #2b91af"&gt;in &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlUnknowns&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;sb&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Append&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;item&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Key&lt;/span&gt;&lt;span style="color: #000000"&gt; + &amp;quot;, &amp;quot; + &lt;/span&gt;&lt;span style="color: #2b91af"&gt;item&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Value&lt;/span&gt;&lt;span style="color: #000000"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;Environment&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;NewLine&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;sb&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ToString&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;()&lt;br /&gt;            : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;base&lt;/span&gt;&lt;span style="color: #000000"&gt;() { &lt;/span&gt;&lt;span style="color: #00a400"&gt;// Force Factory Method Use&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlUnknowns&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;Dictionary&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;string &lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;            : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DeserializingDelegate&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PeformDeserialization&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileSize&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;FileInfo&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;).&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Length&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #00a400"&gt;// The XML File tends to take up 110% of space in memory as it does on disc&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileSize&lt;/span&gt;&lt;span style="color: #000000"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;long&lt;/span&gt;&lt;span style="color: #000000"&gt;)(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;FileSize&lt;/span&gt;&lt;span style="color: #000000"&gt; * &lt;/span&gt;&lt;span style="color: #a31515"&gt;1.10&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;TotalMemoryIncrease&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Result&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DeserializingDelegate&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BeginInvoke&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StartingMemorySize&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetCurrentProcessMemoryInUse&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;///&lt;/span&gt;&lt;span style="color: red"&gt; Deserializes the XML on a different thread.  Use IsCompleted and Progress to determine status&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;param name=&amp;quot;filePath&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #00a400"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;public static &lt;/span&gt;&lt;span style="color: #010001"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;RunDeserializeAsync&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;string &lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return new &lt;/span&gt;&lt;span style="color: #010001"&gt;LoggedXMLSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;T PeformDeserialization&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;string &lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;XmlSerializer &lt;/span&gt;&lt;span style="color: #2b91af"&gt;xs&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;XmlSerializer&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;xs&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;UnknownNode&lt;/span&gt;&lt;span style="color: #000000"&gt; += &lt;/span&gt;&lt;span style="color: #2b91af"&gt;new &lt;/span&gt;&lt;span style="color: green"&gt;XmlNodeEventHandler&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Xs_UnknownNode&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;StreamReader &lt;/span&gt;&lt;span style="color: #2b91af"&gt;reader&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;File&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;OpenText&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;filePath&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;T&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;xs&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Deserialize&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;reader&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private long &lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetCurrentProcessMemoryInUse&lt;/span&gt;&lt;span style="color: #000000"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;Process &lt;/span&gt;&lt;span style="color: #2b91af"&gt;process&lt;/span&gt;&lt;span style="color: #000000"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;Process&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;GetCurrentProcess&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;process&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;WorkingSet64&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;private void &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Xs_UnknownNode&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;object &lt;/span&gt;&lt;span style="color: #2b91af"&gt;sender&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;XmlNodeEventArgs &lt;/span&gt;&lt;span style="color: #2b91af"&gt;e&lt;/span&gt;&lt;span style="color: #000000"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt; (!&lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlUnknowns&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ContainsKey&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;e&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;)) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;XmlUnknowns&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;e&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Name&lt;/span&gt;&lt;span style="color: #000000"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;e&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;LineNumber&lt;/span&gt;&lt;span style="color: #000000"&gt; + &amp;quot;, &amp;quot; + &lt;/span&gt;&lt;span style="color: #2b91af"&gt;e&lt;/span&gt;&lt;span style="color: #000000"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;LinePosition&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-4485711033733541490?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/4485711033733541490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=4485711033733541490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/4485711033733541490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/4485711033733541490'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/02/performing-asynchronous-xml.html' title='Performing Asynchronous XML Serialization'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-4784535863071629773</id><published>2009-02-07T20:25:00.000-05:00</published><updated>2009-02-08T09:32:49.744-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Easing Constraints Without Duplicating Queries</title><content type='html'>I had a rather common problem at work that I created a rather elegent solution for.  Lets say for instance you had a database table that contained a list of businesses, the city they operated in, the state they operated in, and their FEIN.  You were given a list of business names, and asked to find the correct FEIN for each business.  You need to search for the business by name, city, and state first.  If you don't find it, then search for the business by name and city.  If you still don't find it, you finally just need to search by the name, returning the first record each time if there are duplicates.  You've used LINQ to SQL to get a collection of the data, and now you need to return the best match.  At first you may do what I did at first, something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;feins1&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;span style="color: #010001"&gt;business &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;Database&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;                        &amp;amp&amp;amp (&lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;City&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;city&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                        &amp;amp&amp;amp (&lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;State&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;state&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;select &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;FEIN&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;feins1&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Count&lt;/span&gt;&lt;span style="color: black"&gt;() &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;feins1&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;First&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;feins2&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;span style="color: #010001"&gt;business &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;Database&lt;br /&gt;             &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;             &amp;amp&amp;amp (&lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;City&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;city&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;             &lt;/span&gt;&lt;span style="color: blue"&gt;select &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;FEIN&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;feins2&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Count&lt;/span&gt;&lt;span style="color: black"&gt;() &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;feins2&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;First&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;feins3&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;span style="color: #010001"&gt;business &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;Database&lt;br /&gt;             &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;br /&gt;             &lt;/span&gt;&lt;span style="color: blue"&gt;select &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;FEIN&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;feins3&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Count&lt;/span&gt;&lt;span style="color: black"&gt;() &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;feins3&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;First&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You reach for the ctrl-c and ctrl-v on your keyboard, and suddenly feel really dirty.  What if another criteria needs to be added?  You'll have to add another criteria to each where statement, as well as adding an entirely new query.  I spent a few minutes thinking about it, and came up with this solution:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: black"&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: red"&gt;3&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;++) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #010001"&gt;fein&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;GetBestFEIN&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Good Times Inc&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Indianapolis&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;IN&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;fein&lt;/span&gt;&lt;span style="color: black"&gt; != &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;fein&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;&lt;span style="color: #010001"&gt;GetBestFEIN&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;city&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;state&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;&lt;span style="color: #010001"&gt;skipCity&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;&lt;span style="color: #010001"&gt;skipState&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;      &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;Database&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;span style="color: #010001"&gt;i &lt;/span&gt;&lt;span style="color: blue"&gt;in new string&lt;/span&gt;&lt;span style="color: black"&gt;[] { &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;3&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;select new&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;FEIN&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;City&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;State&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; };&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;&lt;span style="color: #010001"&gt;feins&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;from &lt;/span&gt;&lt;span style="color: #010001"&gt;business &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;Database&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;name &lt;br /&gt;                &amp;amp&amp;amp (&lt;/span&gt;&lt;span style="color: #010001"&gt;skipCity&lt;/span&gt;&lt;span style="color: black"&gt; || &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;City&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;city&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &amp;amp&amp;amp (&lt;/span&gt;&lt;span style="color: #010001"&gt;skipState&lt;/span&gt;&lt;span style="color: black"&gt; || &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;State&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;state&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;select &lt;/span&gt;&lt;span style="color: #010001"&gt;business&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;FEIN&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;feins&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Count&lt;/span&gt;&lt;span style="color: black"&gt;() == &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;return string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;feins&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;First&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now if another criteria is added, you just need to increase the for each loop by one, and add another parameter.  I made my change, and went home feeling a lot cleaner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-4784535863071629773?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/4784535863071629773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=4784535863071629773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/4784535863071629773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/4784535863071629773'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2009/02/i-had-rather-common-problem-at-work.html' title='Easing Constraints Without Duplicating Queries'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-7351094177409794436</id><published>2008-11-27T16:56:00.001-05:00</published><updated>2009-02-07T20:23:46.595-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Web Stripper</title><content type='html'>For my Scramble Cheater program, I needed to get a list of all possible words for a dictionary. I found a good website call &lt;a href="http://www.wordsnipe.com/"&gt;Word Snipe&lt;/a&gt;, that listed all the words from the game, and orderd them by word length. This resulted in 105,000 words, spread out 50 at a time, on over 2000 pages. I didn't want to have to copy and past all these words by hand, so I created this program to strip them from the website. It took about 35 minutes for it to download all the words, but it was definetly a lot easier than doing it by hand.&lt;br /&gt;&lt;br /&gt;Below is the code. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: black"&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Form1&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Form&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #010001"&gt;Form1&lt;/span&gt;&lt;span style="color: black"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;InitializeComponent&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;        }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;&lt;span style="color: #010001"&gt;Form1_Load&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;&lt;span style="color: #010001"&gt;sender&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;while&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt;= &lt;/span&gt;&lt;span style="color: red"&gt;105351&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;ParseResponse&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;GetResponse&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;http://wordsnipe.com/results.php?start=&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampPHPSESSID=1af1f78a57145ebc9c14fd4441fcf077&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: red"&gt;50&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;&lt;span style="color: #010001"&gt;ParseResponse&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlResponse&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;endIndex&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;startDiv&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;div class=\&amp;quot;result\&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;startDivLength&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;startDiv&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: red"&gt;50&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;++) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlResponse&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IndexOf&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;startDiv&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlResponse&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IndexOf&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;startDivLength&lt;/span&gt;&lt;span style="color: black"&gt;) + &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;endIndex&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlResponse&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IndexOf&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;/a&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;textBox1&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AppendText&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Format&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;AllWords.Add(\&amp;quot;{0}\&amp;quot;);{1}&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlResponse&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;endIndex&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt;), &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Environment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;NewLine&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;index&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;endIndex&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;&lt;span style="color: #010001"&gt;GetResponse&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;urlAddress&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri &lt;/span&gt;&lt;span style="color: #010001"&gt;uri&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;urlAddress&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpWebRequest &lt;/span&gt;&lt;span style="color: #010001"&gt;request&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpWebRequest&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;WebRequest&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Create&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;uri&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;request&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Method&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;result&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpWebResponse &lt;/span&gt;&lt;span style="color: #010001"&gt;response&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpWebResponse&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;request&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetResponse&lt;/span&gt;&lt;span style="color: black"&gt;()) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Stream &lt;/span&gt;&lt;span style="color: #010001"&gt;responseStream&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;response&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetResponseStream&lt;/span&gt;&lt;span style="color: black"&gt;()) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader &lt;/span&gt;&lt;span style="color: #010001"&gt;readStream&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StreamReader&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;responseStream&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;UTF8&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;result&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;readStream&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ReadToEnd&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;result&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-7351094177409794436?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/7351094177409794436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=7351094177409794436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7351094177409794436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7351094177409794436'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/11/web-stripper.html' title='Web Stripper'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-33345612992133520</id><published>2008-11-27T16:42:00.000-05:00</published><updated>2008-11-27T16:56:09.021-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Beating Scramble On FaceBook</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_1AY4D3VAIsg/SS8WBOakPYI/AAAAAAAAAAM/GH5gv4NmqbE/s1600-h/ScrambleGame.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5273457898979343746" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 334px; CURSOR: hand; HEIGHT: 400px" alt="" src="http://2.bp.blogspot.com/_1AY4D3VAIsg/SS8WBOakPYI/AAAAAAAAAAM/GH5gv4NmqbE/s400/ScrambleGame.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;I was playing this Scramble game for Facebook over The Thanksgiving Holiday, and decided that I wanted to write a program to cheat at the game, and get high scores that would blow my friends out of the water. So did. I was able to score 1553 points, which is about 1400 points more than my nearest friend on Facebook. So much fun.&lt;br /&gt;The Source Code and a more indepth description is on CodeProject. &lt;a href="http://www.codeproject.com/KB/cs/WordScramble.aspx"&gt;http://www.codeproject.com/KB/cs/WordScramble.aspx&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-33345612992133520?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/33345612992133520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=33345612992133520' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/33345612992133520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/33345612992133520'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/11/beating-scramble-on-facebook.html' title='Beating Scramble On FaceBook'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1AY4D3VAIsg/SS8WBOakPYI/AAAAAAAAAAM/GH5gv4NmqbE/s72-c/ScrambleGame.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-4502995141225158028</id><published>2008-10-31T17:40:00.000-04:00</published><updated>2009-02-07T20:22:08.960-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSLA'/><category scheme='http://www.blogger.com/atom/ns#' term='Reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Automated CSLA Testing Helper</title><content type='html'>I was trying to come up with my first test project using the Tester built into VS 2008. I wanted to be able to do some basic CRUD testing on my Csla Business Objects.  I quickly realized that I didn't want to have to go through and set all of my properties by hand for every single class.  Even if I had all the time in the world to do that, if they changed the database schema, which would result in me having to re-code-gen the BOs, I would have to edit my test scripts to handle any new columns (which I would always forget) and remove any columns that no longer exist.  What a pain.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter Reflection.  I was able to create a generic SetPropertyValues function that loops through all the properties of any BusinessObject and automatically assigns all them all a different value.  &lt;/div&gt;&lt;div&gt;This is how it works:&lt;/div&gt;&lt;div&gt;    1. Using reflection, I loop through all the properties on the BO with a counter that is incremented each time&lt;/div&gt;&lt;div&gt;    2. I look at the type of the property and assign it a value based off of its type, using the counter as a base&lt;/div&gt;&lt;div&gt;    3. I then save the value off to a generic list of PropertyInfo, and string values to compare with later.&lt;/div&gt;&lt;div&gt;Thats it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I then wraped that funciton with two other functions, one to perform the intial insert, and one with a different seed value, to perform an update test.  Below is the .Net test class I setup for my customer class, and the SetPropertyValues function that is used to simplify the test.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enjoy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Collections&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Generic&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Linq&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Reflection&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;Microsoft&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;VisualStudio&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;TestTools&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;UnitTesting&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;&lt;span style="color: #010001"&gt;BusinessObjectsUnitTest&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;static class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;SetInitialPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;) &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;SetPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;SetUpdatedPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;) &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;SetPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;SetPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;) &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; {&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyInfo &lt;/span&gt;&lt;span style="color: #010001"&gt;property &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetType&lt;/span&gt;&lt;span style="color: black"&gt;().&lt;/span&gt;&lt;span style="color: #010001"&gt;GetProperties&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Instance&lt;/span&gt;&lt;span style="color: black"&gt; | &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Public&lt;/span&gt;&lt;span style="color: black"&gt; | &lt;/span&gt;&lt;span style="color: #2b91af"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;DeclaredOnly&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Where&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;p&lt;/span&gt;&lt;span style="color: black"&gt; =&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;p&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CanWrite&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp&amp;amp !(&lt;/span&gt;&lt;span style="color: #010001"&gt;p&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType &lt;/span&gt;&lt;span style="color: blue"&gt;is &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Core&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;IBusinessObject&lt;/span&gt;&lt;span style="color: black"&gt;))) {&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;)){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;bool&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;long&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;) ||&lt;br /&gt;                           &lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;) ||&lt;br /&gt;                           &lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;decimal&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;SmartDate&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;SmartDate &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;SmartDate&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Now&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;typeof&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyType&lt;/span&gt;&lt;span style="color: black"&gt;)){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Now&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddDays&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;time&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Unrecognized Type&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;br /&gt;                &lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;stringValue&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;intialValue&lt;/span&gt;&lt;span style="color: black"&gt;++;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public static void &lt;/span&gt;&lt;span style="color: #010001"&gt;AssertAreEqual&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;) &lt;/span&gt;&lt;span style="color: blue"&gt;where &lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #010001"&gt;Csla&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BusinessBase&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;T&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair &lt;/span&gt;&lt;span style="color: #010001"&gt;property &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AreEqual&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Property&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;target&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyInfo &lt;/span&gt;&lt;span style="color: #010001"&gt;Property&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: blue"&gt;set&lt;/span&gt;&lt;span style="color: black"&gt;; }&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public string &lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt; { &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: blue"&gt;set&lt;/span&gt;&lt;span style="color: black"&gt;; }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #010001"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyInfo &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;Property&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;property&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hear is the extremely simple test script would could easily be code generated:&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: black"&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;///&lt;/span&gt;&lt;span style="color: #00a400"&gt;A test for Customer CRUD&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;///&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;        [&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;&lt;span style="color: black"&gt;()]&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;CustomerCRUD&lt;/span&gt;&lt;span style="color: black"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Begin Create&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;NewCustomer&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCallerValuePair&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetInitialPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Save&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Test Create&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AssertAreEqual&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//End Create&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Begin Read&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetCustomer&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Test Read&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AssertAreEqual&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//End Read&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Begin Update&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetUpdatedPropertyValues&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Save&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AssertAreEqual&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetCustomer&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Test Update&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;G2TestHelper&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AssertAreEqual&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;values&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//End Update&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Begin Delete&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;DeleteCustomer&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Customer&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetCustomer&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;expected&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//Test Delete&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IsNull&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;actual&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: green"&gt;//End Delete&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;        }&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-4502995141225158028?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/4502995141225158028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=4502995141225158028' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/4502995141225158028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/4502995141225158028'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/10/automated-csla-testing-helper.html' title='Automated CSLA Testing Helper'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-5361410335383056201</id><published>2008-10-17T16:58:00.001-04:00</published><updated>2009-02-07T20:21:01.895-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Updating A Private Automatic Property</title><content type='html'>I had an issue at work today where I was trying to update a public get, private set automatic propety using reflection.&lt;br /&gt;&lt;br /&gt;My first issue was I didn't now that when you reflect a type, you can access all the inherited public scoped methods and properties and fields, but you can't access any inherited private methods, properties, and fields. Once I had that figured out, I just had to figure out what the name of the field was.&lt;br /&gt;&lt;br /&gt;I downloaded Red Gate's &lt;a href="http://www.red-gate.com/products/reflector/index.htm"&gt;.Net Reflector&lt;/a&gt; (an awesome tool) and dissambled my sample test program.  I then looked at the property generated by the compiler,&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;// Fields&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;CompilerGenerated&lt;/span&gt;&lt;span style="color: black"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;private long&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;k__BackingField&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;// Properties&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public long &lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;br /&gt;&lt;br /&gt;    [&lt;/span&gt;&lt;span style="color: #010001"&gt;CompilerGenerated&lt;/span&gt;&lt;span style="color: black"&gt;]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;get&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;    {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;return this&lt;/span&gt;&lt;span style="color: black"&gt;.&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;k__BackingField&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt;&lt;span style="color: black"&gt; [&lt;/span&gt;&lt;span style="color: #010001"&gt;CompilerGenerated&lt;/span&gt;&lt;span style="color: black"&gt;]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;set&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;&lt;span style="color: black"&gt;.&amp;lt;&lt;/span&gt;&lt;span style="color: #010001"&gt;CustId&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;k__BackingField&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;value&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000080"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And as you can quickly see, the name of the backing field for an automatic property is as follows, &lt;PropertyName&gt;k__BackingField.  Once I had the backing name figured out, I could update just like any other nonpublic field:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;WinPart &lt;/span&gt;&lt;span style="color: #010001"&gt;parent&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;WinPart&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;_mainForm&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;parent&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetType&lt;/span&gt;&lt;span style="color: black"&gt;().&lt;/span&gt;&lt;span style="color: #010001"&gt;GetField&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;CustId&amp;gt;k__BackingField&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Reflection&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;NonPublic&lt;/span&gt;&lt;span style="color: black"&gt; | &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Reflection&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Instance&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;SetValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;newCustId&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-5361410335383056201?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/5361410335383056201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=5361410335383056201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/5361410335383056201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/5361410335383056201'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/10/updating-private-automatic-property.html' title='Updating A Private Automatic Property'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-5324490232965672638</id><published>2008-10-17T15:37:00.000-04:00</published><updated>2009-02-07T20:18:05.154-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Easily Determine Execution Time</title><content type='html'>Most everyone has gone through at one point in time or another, and tried to determine which of two statements, would be quicker to execute. Usually this involves doing two DateTime.Now() function calls and then doing a DateDiff, and having to search the internet for how to format the output correctly.&lt;br /&gt;&lt;br /&gt;My coworker was exploring the System.Diagnostics namespace and stumbled upon the Stopwatch class which makes solving this issue much easier. Observe the snippet at the bottom of this post. Not that you'd ever want to do this particular example, but look at the power it gives you.&lt;br /&gt;&lt;br /&gt;In this example, I'm wanting to see how long it takes to perform the GetEditLevel() function, while allowing the user to read the name of the customer. By starting the stopwatch only after the message box has been closed, and stopping it after the function has finished executing, it will keep track of the total number of ticks, then you can call ElapsedMilliseconds to get the total amount of time.&lt;br /&gt;&lt;br /&gt;I think its a beautiful layer of abstraction.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:#010001;"&gt;totalEditLevel&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:red;"&gt;0&lt;/span&gt;&lt;span style="color:black;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Diagnostics&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Stopwatch &lt;/span&gt;&lt;span style="color:#010001;"&gt;watch&lt;/span&gt;&lt;span style="color:black;"&gt; = &lt;/span&gt;&lt;span style="color:#010001;"&gt;System&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Diagnostics&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Stopwatch&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;StartNew&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CustomerInfo &lt;/span&gt;&lt;span style="color:#010001;"&gt;cust &lt;/span&gt;&lt;span style="color:blue;"&gt;in &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;CustomerList&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetCustomerListAll&lt;/span&gt;&lt;span style="color:black;"&gt;()){&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;watch&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;IsRunning&lt;/span&gt;&lt;span style="color:black;"&gt;){&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:green;"&gt;//First time, Reset it&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:#010001;"&gt;watch&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Reset&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Show&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Customer is "&lt;/span&gt;&lt;span style="color:black;"&gt; + &lt;/span&gt;&lt;span style="color:#010001;"&gt;cust&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;CustName&lt;/span&gt;&lt;span style="color:black;"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#010001;"&gt;watch&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Start&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#010001;"&gt;totalEditLevel&lt;/span&gt;&lt;span style="color:black;"&gt; += &lt;/span&gt;&lt;span style="color:#010001;"&gt;cust&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;GetEditLevel&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#010001;"&gt;watch&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Stop&lt;/span&gt;&lt;span style="color:black;"&gt;();&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MessageBox&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Show&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"Total Seconds was "&lt;/span&gt;&lt;span style="color:black;"&gt; + ((&lt;/span&gt;&lt;span style="color:blue;"&gt;double&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:#010001;"&gt;watch&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;ElapsedMilliseconds&lt;/span&gt;&lt;span style="color:black;"&gt; / &lt;/span&gt;&lt;span style="color:red;"&gt;100.0&lt;/span&gt;&lt;span style="color:black;"&gt;).&lt;/span&gt;&lt;span style="color:#010001;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;());&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-5324490232965672638?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/5324490232965672638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=5324490232965672638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/5324490232965672638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/5324490232965672638'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/10/easily-determine-execution-time.html' title='Easily Determine Execution Time'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-3454508712459902945</id><published>2008-09-18T09:40:00.000-04:00</published><updated>2009-02-07T20:17:32.026-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Abusing the String.Format() function, or an efficent way to check if a record can be deleted?</title><content type='html'>&lt;p&gt;In my main project at work, I'm building an application to configure a database. An issue I had to overcome was how to determine if a record could be deleted, or if its deletion would result in orphan records.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;I have come up with a model of creating an AssertCanDelete() function that checks all of the tables that could be referencing a given record, and throws an exception saying the name of the table that is referencing the record. The default format for this method is as follows:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Create a Select statement that has a Select Count(*) sub query for each table that could reference the object.&lt;/p&gt;&lt;p&gt;Go through the result set and if any value is greater than 0, then I know that it is being referenced, and can't be deleted.&lt;/p&gt;&lt;p&gt;I used the the String.Format in my Command Text and ended up something like this:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: black"&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandText&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;String&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Format&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;SELECT * FROM &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{3} WHERE {3}.{1} = :{1} AND {3}.{2} = :{2} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{4} WHERE {4}.{1} = :{1} AND {4}.{2} = :{2} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{5} WHERE {5}.{1} = :{1} AND {5}.{2} = :{2} ) &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, _&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;DatabaseOwner&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;PRTNR_ID&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;SECT_NAME&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;PRTNR_SECT_DE&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;PRTNR_SECT_SRVC_FIL&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;PRTNR_SECT_WF_STEP_ROLE&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Parameters&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;PRTNR_ID&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;OracleType&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Number&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;PrtnrId&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Parameters&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;SECT_NAME&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;OracleType&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;VarChar&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Which I kind of like.  The first "{0}" is the database table schema or database owner.  The second "{}" for each line is the Table Name, which then gets repeated with a . and the first part of the primary key "{1}" and AND'ed to the second part of the primary key "{2}".  It saved me alot of time having to write every SQL statement and every table name multiple times.  I could also just copy a line, and insert the table name once, and I was good to go.  Another useful way to not repeat yourself. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;When I was following this patern for another table, things quickly got ugly when I realized that there where multiple columns that would be referencing my record.  Below is the code, what do you think?  Is it an abuse of the String.Format() function and the entire process needs to be trashed, or is it an efficient way to check if a record can be deleted?&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: black"&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;Private Shared Sub &lt;/span&gt;&lt;span style="color: #010001"&gt;AssertCanDelete&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;&lt;span style="color: #010001"&gt;tr &lt;/span&gt;&lt;span style="color: blue"&gt;As &lt;/span&gt;&lt;span style="color: #010001"&gt;OracleTransaction&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria &lt;/span&gt;&lt;span style="color: blue"&gt;As &lt;/span&gt;&lt;span style="color: #010001"&gt;Criteria&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;Using &lt;/span&gt;&lt;span style="color: #010001"&gt;cm &lt;/span&gt;&lt;span style="color: blue"&gt;As &lt;/span&gt;&lt;span style="color: #010001"&gt;OracleCommand&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;tr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Connection&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CreateCommand&lt;/span&gt;&lt;span style="color: black"&gt;()&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Transaction&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;tr&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandType&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;CommandType&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandText&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;String&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Format&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;SELECT * FROM &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{2} WHERE :{1} in ({2}.{1}, {2}.INIT_{1}, {2}.COMPARE_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{3} WHERE {3}.{1} = :{1} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{4} WHERE {4}.{1} = :{1} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{5} WHERE {5}.{1} = :{1} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{6} WHERE {6}.{1} = :{1} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{7} WHERE {7}.{1} = :{1} ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{8} WHERE :{1} in ({8}.{1}, {8}.INIT_{1}, {8}.COMPARE_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{9} WHERE :{1} in ({9}.{1}, {9}.INIT_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{10} WHERE :{1} in ({10}.{1}, {10}.INIT_{1}, {10}.COMPARE_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{11} WHERE :{1} in ({11}.{1}, {11}.INIT_{1}, {11}.COMPARE_{1}), {11}.NEXT_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{12} WHERE :{1} in ({12}.{1}, {12}.INIT_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{13} WHERE :{1} in ({13}.{1}, {13}.INIT_{1}, {13}.COMPARE_{1}) ), &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp _&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;(SELECT COUNT(*) FROM {0}{14} WHERE :{1} in ({14}.{1}, {14}.INIT_{1}, {14}.COMPARE_{1}), {14}.NEXT_{1}) ) &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, _&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;DatabaseOwner&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;SECT_NAME&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;sect_valid_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;sect_de_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;pkg_sect_de_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;prtnr_sect_de&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;prtnr_sect&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;pkg_sect_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;pkg_sect_valid_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;pkg_sect_de_fltr_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;pkg_sect_de_valid&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;pkg_sect_de_nav_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;sect_de_fltr_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;sect_de_valid_ref&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;sect_sect_de_nav&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Parameters&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;SECT_NAME&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;OracleType&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;VarChar&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Value&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;Using &lt;/span&gt;&lt;span style="color: #010001"&gt;dr &lt;/span&gt;&lt;span style="color: blue"&gt;As &lt;/span&gt;&lt;span style="color: #010001"&gt;SafeDataReader&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;New &lt;/span&gt;&lt;span style="color: #010001"&gt;SafeDataReader&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;cm&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ExecuteReader&lt;/span&gt;&lt;span style="color: black"&gt;())&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Read&lt;/span&gt;&lt;span style="color: black"&gt;()&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Section Validation Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Section Data Element Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Package Section Data Element Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;3&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Partner Section Data Element table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;4&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Partner Section table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;5&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Package Section Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;6&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Package Section Validation Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;7&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Package Section Data Element Filter Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;8&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Package Section Data Element Validation Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;9&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Package Section Data Element Navigation Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;10&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Section Data Element Filter Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;11&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Section Data Element Validation Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: #010001"&gt;dr&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetInt32&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;12&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;0 &lt;/span&gt;&lt;span style="color: blue"&gt;Then&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;Throw New &lt;/span&gt;&lt;span style="color: #010001"&gt;ConstraintException&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Section (&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;criteria&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SectName&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;) can not be deleted because it is currently referenced in the Section Data Element Navigation Reference table&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;End If&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;End Using&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;End Using&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;End Sub&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-3454508712459902945?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/3454508712459902945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=3454508712459902945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3454508712459902945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/3454508712459902945'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/09/abusing-stringformat-function-or.html' title='Abusing the String.Format() function, or an efficent way to check if a record can be deleted?'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-7716143504460346997</id><published>2008-09-15T10:27:00.000-04:00</published><updated>2009-02-07T20:05:23.567-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Creating a VS.Net 2008 Addin</title><content type='html'>In trying to take the RTF Converter to a new level, I decided to create it as an Addin. As this is my first time creating an add in, I decided to share what I have learned.&lt;br /&gt;&lt;br /&gt;VS 2008 has a Project wizard that is used to create the project that works quite well when trying to debug your add in, but when trying to actually run it, doesn't work at all. Some of the Enumerations that happen when running the addin in debug mode, never happen when trying to run it for real.&lt;br /&gt;&lt;br /&gt;Some other issues that I ran into was a complete lack of examples for creating a link on the right click menu of the code. I did find a website and was able to add mix and match it with the auto generated code from the wizard to come up with a workable solution.&lt;br /&gt;&lt;br /&gt;The first step in creating an Add in, is to Implement the Extensibility.IDTExtensibility2 interface and IDTCommand Target. There are three main functions that you need to be concerned about&lt;br /&gt;&lt;br /&gt;1. OnConnection()&lt;br /&gt;- This function gets called either when VS starts, or when the app is loaded. This is where code that is needed to either add your add int to the tool bar, or (as in my case) add it as a CommandBarPopup( Basically a menu that has children commands that pop out to the side). You have to find the "Code Window" Command bar, then add a CommandBarPopup, then add any commands that you want to have displayed.&lt;br /&gt;I refactored a new AddContextMenuChildItem method to handle adding the new commands that I wanted to implement to my context menu. On of the most confusing parts was trying to determine what I call the IconId to use. I ended up having to create a tempory project that created every single icon that was possible, to go through and select the ones that made the most sense. I know you can add your own personal icons, but I didn't have the time or the patience.&lt;br /&gt;I also ran into an issu with the command already existing if I opened up another version of VS, but not being added to the PopupBar. So I had to add extra logic if it already exists, to just add it. I guess I should probably change this even further to check to see if it exists first, not the other way around.&lt;br /&gt;&lt;br /&gt;2. QueryStatus()&lt;br /&gt;- This function is used to hide or show items. I wanted to show the Convert Selected option, only if something was selected, so I had to add logic for this. If you always wanted them to be displayed, I think you could always just return true.&lt;br /&gt;&lt;br /&gt;3. Exec()&lt;br /&gt;- This is the function that gets fired when the command gets clicked. It takes some simple logic to determine what got clicked, and then I'm on my way.&lt;br /&gt;&lt;br /&gt;The source code is listed below. Hopefully this will be helpful for others.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;Extensibility&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;EnvDTE&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;EnvDTE80&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;Microsoft&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;VisualStudio&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBars&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Resources&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Reflection&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Globalization&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Windows&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Forms&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;&lt;span style="color: #010001"&gt;CodeToHtml&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;The object for implementing an Add-in.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='IDTExtensibility2' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Connect&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IDTExtensibility2&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IDTCommandTarget&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private const string &lt;/span&gt;&lt;span style="color: #010001"&gt;ConvertSelection&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;ConvertSelectionToHtml&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private const string &lt;/span&gt;&lt;span style="color: #010001"&gt;OpenWindowForConvert&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;OpenConversionWindow&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private bool &lt;/span&gt;&lt;span style="color: #010001"&gt;hasBeenLoaded&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the constructor for the Add-in object. Place your initialization code within this method.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #010001"&gt;Connect&lt;/span&gt;&lt;span style="color: black"&gt;()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='application'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Root object of the host application.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='connectMode'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Describes how the Add-in is being loaded.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='addInInst'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Object representing this Add-in.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='IDTExtensibility2' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;OnConnection&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;&lt;span style="color: #010001"&gt;application&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ext_ConnectMode &lt;/span&gt;&lt;span style="color: #010001"&gt;connectMode&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;&lt;span style="color: #010001"&gt;addInInst&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array &lt;/span&gt;&lt;span style="color: #010001"&gt;custom&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;DTE2&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;application&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;_addInInstance&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;AddIn&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;addInInst&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: green"&gt;//if (connectMode == ext_ConnectMode.ext_cm_UISetup) { //For some Reason, this never gets called, so I've changed it&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;connectMode&lt;/span&gt;&lt;span style="color: black"&gt; != &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ext_ConnectMode&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ext_cm_CommandLine&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;object&lt;/span&gt;&lt;span style="color: black"&gt;[] &lt;/span&gt;&lt;span style="color: #010001"&gt;contextGUIDS&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new object&lt;/span&gt;&lt;span style="color: black"&gt;[] { };&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Commands2 &lt;/span&gt;&lt;span style="color: #010001"&gt;commands&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Commands2&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Commands&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsMenuName&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: green"&gt;//If you would like to move the command to a different menu, change the word &amp;quot;Tools&amp;quot; to the &lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: green"&gt;//  English version of the menu. This code will take the culture, append on the name of the menu&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: green"&gt;//  then add the command to that menu. You can find a list of all the top-level menus in the file&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: green"&gt;//  CommandBar.resx.&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;resourceName&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ResourceManager &lt;/span&gt;&lt;span style="color: #010001"&gt;resourceManager&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ResourceManager&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;CodeToHtml.CommandBar&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Assembly&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetExecutingAssembly&lt;/span&gt;&lt;span style="color: black"&gt;());&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo &lt;/span&gt;&lt;span style="color: #010001"&gt;cultureInfo&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;LocaleID&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;cultureInfo&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;TwoLetterISOLanguageName&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;zh&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Globalization&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CultureInfo &lt;/span&gt;&lt;span style="color: #010001"&gt;parentCultureInfo&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;cultureInfo&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Parent&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;resourceName&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Concat&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;parentCultureInfo&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Tools&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                        } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;resourceName&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Concat&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;cultureInfo&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;TwoLetterISOLanguageName&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Tools&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                        }&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsMenuName&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;resourceManager&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetString&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;resourceName&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    } &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: green"&gt;//We tried to find a localized version of the word Tools, but one was not found.&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: green"&gt;//  Default to the en-US word, which may work for the current culture.&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsMenuName&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Tools&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;//Place the command on the tools menu.&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;//Find the MenuBar command bar, which is the top-level command bar holding all the main menu items:&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;Microsoft&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;VisualStudio&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBars&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CommandBar &lt;/span&gt;&lt;span style="color: #010001"&gt;codeWindowContextCommandBar&lt;/span&gt;&lt;span style="color: black"&gt; = ((&lt;/span&gt;&lt;span style="color: #010001"&gt;Microsoft&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;VisualStudio&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBars&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CommandBars&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBars&lt;/span&gt;&lt;span style="color: black"&gt;)[&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code Window&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;];&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;CommandBarPopup &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;CommandBarPopup&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;codeWindowContextCommandBar&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Controls&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;MsoControlType&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;msoControlPopup&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Missing&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Missing&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Missing&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Missing&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Caption&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code To Html&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;//This try/catch block can be duplicated if you wish to add multiple commands to be handled by your Add-in,&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;//  just make sure you also update the QueryStatus/Exec method to include the new command names.&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;AddContextMenuChildItem&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #010001"&gt;contextGUIDS&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;commands&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;ConvertSelection&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;223&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Convert Selection To HTML&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Converts the selected code to html&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;AddContextMenuChildItem&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #010001"&gt;contextGUIDS&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;commands&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;OpenWindowForConvert&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: red"&gt;178&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Open HTML Convert Window&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Opens a window to paste text in to convert&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;hasBeenLoaded&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;&lt;span style="color: #010001"&gt;ex&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;ex&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;(), &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code To HTML&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;&lt;span style="color: #010001"&gt;AddContextMenuChildItem&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref object&lt;/span&gt;&lt;span style="color: black"&gt;[] &lt;/span&gt;&lt;span style="color: #010001"&gt;contextGUIDS&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Commands2 &lt;/span&gt;&lt;span style="color: #010001"&gt;commands&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;CommandBarPopup &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;iconId&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;buttonText&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;helpText&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: green"&gt;//Add a command to the Commands collection:&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Command &lt;/span&gt;&lt;span style="color: #010001"&gt;command&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;commands&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddNamedCommand2&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;_addInInstance&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;buttonText&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;helpText&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;iconId&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #010001"&gt;contextGUIDS&lt;/span&gt;&lt;span style="color: black"&gt;, (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatus&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandStatusSupported&lt;/span&gt;&lt;span style="color: black"&gt; + (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatus&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandStatusEnabled&lt;/span&gt;&lt;span style="color: black"&gt;, (&lt;/span&gt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStyle&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandStylePictAndText&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandControlType&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandControlTypeButton&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: green"&gt;//Add a control for the command to the tools menu:&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; ((&lt;/span&gt;&lt;span style="color: #010001"&gt;command&lt;/span&gt;&lt;span style="color: black"&gt; != &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;amp;&amp;amp; (&lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt; != &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;command&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddControl&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBar&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBar&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;accChildCount&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;command&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Command Was Null&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code To HTML&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Tools Popup Was Null&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code To HTML&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(!&lt;/span&gt;&lt;span style="color: #010001"&gt;hasBeenLoaded&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;// For some reason this was having issues adding the command, so if it already exists, I need to re-add it to the Command Bar.&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Command &lt;/span&gt;&lt;span style="color: #010001"&gt;command &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;commands&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;command&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Name&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;CodeToHtml.Connect.&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;name&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;command&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;AddControl&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBar&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;toolsPopup&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;CommandBar&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;accChildCount&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Shows exists, when it hasn't been loaded&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code To HTML&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the OnDisconnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being unloaded.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='disconnectMode'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Describes how the Add-in is being unloaded.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='custom'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Array of parameters that are host application specific.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='IDTExtensibility2' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;OnDisconnection&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ext_DisconnectMode &lt;/span&gt;&lt;span style="color: #010001"&gt;disconnectMode&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array &lt;/span&gt;&lt;span style="color: #010001"&gt;custom&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the OnAddInsUpdate method of the IDTExtensibility2 interface. Receives notification when the collection of Add-ins has changed.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='custom'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Array of parameters that are host application specific.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='IDTExtensibility2' /&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;OnAddInsUpdate&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array &lt;/span&gt;&lt;span style="color: #010001"&gt;custom&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the OnStartupComplete method of the IDTExtensibility2 interface. Receives notification that the host application has completed loading.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='custom'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Array of parameters that are host application specific.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='IDTExtensibility2' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;OnStartupComplete&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array &lt;/span&gt;&lt;span style="color: #010001"&gt;custom&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the OnBeginShutdown method of the IDTExtensibility2 interface. Receives notification that the host application is being unloaded.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='custom'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Array of parameters that are host application specific.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='IDTExtensibility2' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;OnBeginShutdown&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Array &lt;/span&gt;&lt;span style="color: #010001"&gt;custom&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the QueryStatus method of the IDTCommandTarget interface. This is called when the command's availability is updated&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='commandName'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;The name of the command to determine state for.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='neededText'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Text that is needed for the command.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='status'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;The state of the command in the user interface.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='commandText'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Text requested by the neededText parameter.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='Exec' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;QueryStatus&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;commandName&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatusTextWanted &lt;/span&gt;&lt;span style="color: #010001"&gt;neededText&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref &lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatus &lt;/span&gt;&lt;span style="color: #010001"&gt;status&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref object &lt;/span&gt;&lt;span style="color: #010001"&gt;commandText&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: green"&gt;//if (neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;commandName&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;CodeToHtml.Connect.&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;OpenWindowForConvert&lt;/span&gt;&lt;span style="color: black"&gt; || &lt;/span&gt;&lt;span style="color: #010001"&gt;commandName&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;CodeToHtml.Connect.&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;ConvertSelection&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span style="color: #010001"&gt;UserHasTextSelected&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;status&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatus&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatus&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandStatusSupported&lt;/span&gt;&lt;span style="color: black"&gt; | &lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandStatus&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandStatusEnabled&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: green"&gt;//}&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: green"&gt;//MessageBox.Show(commandName + &amp;quot; not supported\n&amp;quot; + neededText.ToString());&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;&lt;span style="color: #010001"&gt;ex&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;ex&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;(), &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Code To HTML&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Implements the Exec method of the IDTCommandTarget interface. This is called when the command is invoked.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='commandName'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;The name of the command to execute.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='executeOption'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Describes how the command should be run.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='varIn'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Parameters passed from the caller to the command handler.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='varOut'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Parameters passed from the command handler to the caller.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;param term='handled'&amp;gt;&lt;/span&gt;&lt;span style="color: #00a400"&gt;Informs the caller if the command was handled or not.&lt;/span&gt;&lt;span style="color: green"&gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;/// &amp;lt;seealso class='Exec' /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;&lt;span style="color: #010001"&gt;Exec&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;commandName&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandExecOption &lt;/span&gt;&lt;span style="color: #010001"&gt;executeOption&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref object &lt;/span&gt;&lt;span style="color: #010001"&gt;varIn&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref object &lt;/span&gt;&lt;span style="color: #010001"&gt;varOut&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;ref bool &lt;/span&gt;&lt;span style="color: #010001"&gt;handled&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #010001"&gt;handled&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;executeOption&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #2b91af"&gt;vsCommandExecOption&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;vsCommandExecOptionDoDefault&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;switch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;commandName&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;commandName&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;LastIndexOf&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;'.'&lt;/span&gt;&lt;span style="color: black"&gt;) + &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;))&lt;br /&gt;                {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #010001"&gt;OpenWindowForConvert&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;RTF2HTMLConverter&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;RTF2HTMLForm &lt;/span&gt;&lt;span style="color: #010001"&gt;form&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #010001"&gt;RTF2HTMLConverter&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;RTF2HTMLForm&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;form&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;handled&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #010001"&gt;ConvertSelection&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;UserHasTextSelected&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;true&lt;/span&gt;&lt;span style="color: black"&gt;)){&lt;br /&gt;                            ((&lt;/span&gt;&lt;span style="color: #010001"&gt;EnvDTE&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TextSelection&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ActiveDocument&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Selection&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Copy&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;text&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Clipboard&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetText&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Windows&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Forms&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TextDataFormat&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Rtf&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Clipboard&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetText&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;RTF2HTMLConverter&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;ConvertLogic&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;GetFormattedHtml&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;text&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;                        }&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private bool &lt;/span&gt;&lt;span style="color: #010001"&gt;UserHasTextSelected&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;&lt;span style="color: #010001"&gt;assertError&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ActiveDocument&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;No Document Selected&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ActiveDocument&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Selection&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: blue"&gt;null&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Nothing Selected&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt;  {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;EnvDTE&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TextSelection &lt;/span&gt;&lt;span style="color: #010001"&gt;text&lt;/span&gt;&lt;span style="color: black"&gt; = (&lt;/span&gt;&lt;span style="color: #010001"&gt;EnvDTE&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #2b91af"&gt;TextSelection&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ActiveDocument&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Selection&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;text&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;No Text Selected&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                    }&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;catch&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;No Text Selected&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt; != &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;assertError&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Show&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;error&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;CodeToHtml&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;return false&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            }&lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;return true&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DTE2 &lt;/span&gt;&lt;span style="color: #010001"&gt;_applicationObject&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;AddIn &lt;/span&gt;&lt;span style="color: #010001"&gt;_addInInstance&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-7716143504460346997?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/7716143504460346997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=7716143504460346997' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7716143504460346997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/7716143504460346997'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/09/creating-vsnet-2008-addin.html' title='Creating a VS.Net 2008 Addin'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8213254954663255003</id><published>2008-09-05T16:35:00.000-04:00</published><updated>2009-02-18T23:36:54.135-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB'/><category scheme='http://www.blogger.com/atom/ns#' term='CSLA'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Using LINQ To Ensure No Objects Have Duplicate Keys</title><content type='html'>I had an interseting business requirement the other day. I'm working with a &lt;a href="http://www.lhotka.net/cslanet/Default.aspx"&gt;CSLA&lt;/a&gt; Collection of objects, and they wanted the end user to be able to be able to change a property that is one of the three columns that makes up the primary key.  I sat down and started using some LINQ to objects and was amazed at how much power it has in just a 6 lines of code.  It was also my first time using the Group By Function&lt;br /&gt;&lt;br /&gt;Normally with the group by, you perform some agregate functions on the group.  So the "Into Group" would be "Into Sum(naviagation.SectDeNavOrdrNbr)".  But by Grouping it into group, the result is a collection that contains the objects in the Group By Clause (SectDeNavOrdNbr, SectName, DeName) and then a collection of all the objects that are in that group.&lt;br /&gt;&lt;br /&gt;So after I have my group by clause, I perform a contains to see if any collections of the group have more than one item in them.  The must amazing part, is techinally, it only took 1 line of code!  In the words of a dear friend of mine, "God Bless .Net".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; &lt;span style="font-size:100%;"&gt;&lt;br /&gt;  &lt;span style="color:blue;"&gt;Dim &lt;/span&gt;&lt;span style="color:#010001;"&gt;hasDuplicatePrimaryKeys &lt;/span&gt;&lt;span style="color:blue;"&gt;As Boolean&lt;/span&gt;&lt;span style="color:black;"&gt; = ( _&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:blue;"&gt;    From &lt;/span&gt;&lt;span style="color:#010001;"&gt;navigation &lt;/span&gt;&lt;span style="color:blue;"&gt;As &lt;/span&gt;&lt;span style="color:#010001;"&gt;SectionDataElementNavigationReference &lt;/span&gt;&lt;span style="color:blue;"&gt;In Me&lt;/span&gt;&lt;span style="color:black;"&gt; _&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;  Group By &lt;/span&gt;&lt;span style="color:#010001;"&gt;navigation&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;SectDeNavOrdNbr&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#010001;"&gt;navigation&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;SectName&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:#010001;"&gt;navigation&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;DeName&lt;/span&gt;&lt;span style="color:black;"&gt; _                                          &lt;/span&gt;&lt;br /&gt;  &lt;span style="color:blue;"&gt;    Into Group&lt;/span&gt;&lt;span style="color:black;"&gt;).&lt;/span&gt;&lt;span style="color:#010001;"&gt;Contains&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#010001;"&gt;c&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:#010001;"&gt; c&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;Group&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#010001;"&gt;Count&lt;/span&gt;&lt;span style="color:black;"&gt;() &amp;gt; 1)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;span style="color:black;"&gt; (&lt;/span&gt;&lt;span style="color:#010001;"&gt;hasDuplicatePrimaryKeys&lt;/span&gt;&lt;span style="color:black;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;Then&lt;br /&gt;    &lt;/span&gt;  &lt;span style="color:blue;"&gt;Throw New &lt;/span&gt;&lt;span style="color:#010001;"&gt;InvalidConstraintException&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;"More than one Section Data Element Navigation Reference was found with the same Section Name, Data Element Name, and Section Data Element Navigation Order Number"&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;  End If&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8304297248644840550-8213254954663255003?l=dotnetdust.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dotnetdust.blogspot.com/feeds/8213254954663255003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8304297248644840550&amp;postID=8213254954663255003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8213254954663255003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8304297248644840550/posts/default/8213254954663255003'/><link rel='alternate' type='text/html' href='http://dotnetdust.blogspot.com/2008/09/using-linq-to-ensure-no-objects-have.html' title='Using LINQ To Ensure No Objects Have Duplicate Keys'/><author><name>Daryl</name><uri>http://www.blogger.com/profile/11229612024940240358</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8304297248644840550.post-8034376911431309563</id><published>2008-09-05T13:50:00.000-04:00</published><updated>2009-02-07T19:55:29.381-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Overcoming Displaying Code as HTML</title><content type='html'>On my previous post, I spent about an hour just getting the formatting to look right. I ended up pasting it into word, and fooling around with the formatting till I got it just right, and saving it, then e-mailing it to myself in Gmail so I could view it directly from there, and it looked sort of ok, except that it had some extra lines in it, so I had to work directly with the HTML to get it to look the way I wanted.&lt;br /&gt;&lt;br /&gt;Because computer programmers like myself are lazy, and if we have to do something twice, that's once to much, I wrote a program to do this for me. Right now it consists of Two RichTextBoxes and a WebBrowser thrown onto a windows from. Paste RTF code (like the code from VS) into rtfTextBox, and press the convert button and presto, you're done. The Html is outputed in another RichTextBox, and copied to the Clipboard, while the Webrowser gives you a preview. No CSS are needed.&lt;br /&gt;&lt;br /&gt;In the near future I'd love to turn this into a VS add in so I can just select some code, right click, and select Convert.&lt;br /&gt;&lt;br /&gt;You'll fine the source code posted below, which was generated using itself of course. :)&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Collections&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Generic&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ComponentModel&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Data&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Drawing&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Linq&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;&lt;span style="color: #010001"&gt;System&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Windows&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Forms&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;&lt;span style="color: #010001"&gt;RTF2HTMLConverter&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;public partial class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Form1&lt;/span&gt;&lt;span style="color: black"&gt; : &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Form&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;BackwardsSlash&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampbws;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;OpenCurlyBracket&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampocb;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;CloseCurlyBracker&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampccb;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;DoubleQuote&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampquot;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;GreaterThan&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampgt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;LessThan&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amplt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;const string &lt;/span&gt;&lt;span style="color: #010001"&gt;Ampersand&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;ampamp&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;&lt;span style="color: #010001"&gt;_inColorSpan&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #010001"&gt;Form1&lt;/span&gt;&lt;span style="color: black"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;InitializeComponent&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;&lt;span style="color: #010001"&gt;button1_Click&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;&lt;span style="color: #010001"&gt;sender&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;&lt;span style="color: #010001"&gt;e&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;[] &lt;/span&gt;&lt;span style="color: #010001"&gt;rtf&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfTextBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Rtf&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;Ampersand&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\\\\&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;BackwardsSlash&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\\}&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;CloseCurlyBracker&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\\{&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;OpenCurlyBracket&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;DoubleQuote&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;GreaterThan&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;LessThan&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Split&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;'\n'&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;_inColorSpan&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;false&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringBuilder &lt;/span&gt;&lt;span style="color: #010001"&gt;output&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringBuilder&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;output&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Append&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;pre class=\&amp;quot;code\&amp;quot;&amp;gt;&amp;lt;span style=\&amp;quot;font-size:85%;\&amp;quot;&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: #010001"&gt;rtf&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;++) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;rtf&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt;];&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;i&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;GetColors&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;output&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Append&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;GetOutputLine&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;));&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;output&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Append&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt;\n&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlTextBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;output&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;().&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;BackwardsSlash&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\\&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;CloseCurlyBracker&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Replace&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;OpenCurlyBracket&lt;/span&gt;&lt;span style="color: black"&gt;,&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #010001"&gt;webBrowser1&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;DocumentText&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlTextBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Clipboard&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;SetText&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;htmlTextBox&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Text&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private string &lt;/span&gt;&lt;span style="color: #010001"&gt;GetOutputLine&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;[] &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLineSegments&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Split&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;'\\'&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;currentColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;segment &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLineSegments&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;continue&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;GetFirstWord&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IndexOf&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;' '&lt;/span&gt;&lt;span style="color: black"&gt;) == &lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;/span&gt;&lt;span style="color: green"&gt;//Trailing Spaces, just add it&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Keys&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Contains&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Trim&lt;/span&gt;&lt;span style="color: black"&gt;())) {&lt;/span&gt;&lt;span style="color: green"&gt;//Change the Color&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;) { &lt;/span&gt;&lt;span style="color: green"&gt;// No Other Text, just change the color&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;currentColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;GetColorSpan&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;]);&lt;br /&gt;                    } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Trim&lt;/span&gt;&lt;span style="color: black"&gt;() != &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt;) { &lt;/span&gt;&lt;span style="color: green"&gt;// Change color and Add the rest of the segment if there is something to update&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;currentColor&lt;/span&gt;&lt;span style="color: black"&gt; != &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Empty&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp&amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;currentColor&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Trim&lt;/span&gt;&lt;span style="color: black"&gt;()) { &lt;/span&gt;&lt;span style="color: green"&gt;// Color hasn't changed, skip adding new color span&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                        } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;currentColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Trim&lt;/span&gt;&lt;span style="color: black"&gt;();&lt;br /&gt;                            &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;GetColorSpan&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;currentColor&lt;/span&gt;&lt;span style="color: black"&gt;]) + &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: green"&gt;//all Blank Spaces, don't worry about the color&lt;br /&gt;                        &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    }&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (!&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Contains&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;' '&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;amp&amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLineSegments&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt; &amp;gt; &lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: black"&gt;) { &lt;/span&gt;&lt;span style="color: green"&gt;// Control word, skip it&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;continue&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else if&lt;/span&gt;&lt;span style="color: black"&gt; (!&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Contains&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;' '&lt;/span&gt;&lt;span style="color: black"&gt;) &amp;amp&amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLineSegments&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;] == &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt; &amp;amp&amp;amp &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLineSegments&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;/span&gt;&lt;span style="color: green"&gt;// There is no Color for this segment, so use everything&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: green"&gt;//First word is control word, skip it and add the rest&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;outputLine&lt;/span&gt;&lt;span style="color: black"&gt; += &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private static string &lt;/span&gt;&lt;span style="color: #010001"&gt;GetFirstWord&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (!&lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Contains&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;' '&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;0&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;segment&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;IndexOf&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;' '&lt;/span&gt;&lt;span style="color: black"&gt;) + &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #010001"&gt;firstWord&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private static void &lt;/span&gt;&lt;span style="color: #010001"&gt;GetColors&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&lt;span style="color: black"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;[] &lt;/span&gt;&lt;span style="color: #010001"&gt;colorValues&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Substring&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;, &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfLine&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt; - &lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: black"&gt;).&lt;/span&gt;&lt;span style="color: #010001"&gt;Split&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;';'&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfColor&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;&lt;span style="color: #010001"&gt;k&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;k&lt;/span&gt;&lt;span style="color: black"&gt; &amp;lt; &lt;/span&gt;&lt;span style="color: #010001"&gt;colorValues&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Length&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: #010001"&gt;k&lt;/span&gt;&lt;span style="color: black"&gt;++) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;colorValues&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: #010001"&gt;k&lt;/span&gt;&lt;span style="color: black"&gt;];&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;rtfColor&lt;/span&gt;&lt;span style="color: black"&gt; == &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;continue&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                }&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;rtfColor&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Contains&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;\\red&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)) {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&lt;span style="color: black"&gt;[] &lt;/span&gt;&lt;span style="color: #010001"&gt;hexColors&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfColor&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Split&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;'\\'&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;GetHexValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;hexColors&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;1&lt;/span&gt;&lt;span style="color: black"&gt;], &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;) + &lt;/span&gt;&lt;span style="color: #010001"&gt;GetHexValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;hexColors&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;2&lt;/span&gt;&lt;span style="color: black"&gt;], &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;green&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;) + &lt;/span&gt;&lt;span style="color: #010001"&gt;GetHexValue&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;hexColors&lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: red"&gt;3&lt;/span&gt;&lt;span style="color: black"&gt;], &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;blue&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #010001"&gt;ConvertColor&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;color: &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                } &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt;&lt;span style="color: black"&gt; {&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Unrecognized Color &amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;rtfColor&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #010001"&gt;colors&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;Add&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;cf&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt; + &lt;/span&gt;&lt;span style="color: #010001"&gt;k&lt;/span&gt;&lt;span style="color: black"&gt;.&lt;/span&gt;&lt;span style="color: #010001"&gt;ToString&lt;/span&gt;&lt;span style="color: black"&gt;(), &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;private static string &lt;/span&gt;&lt;span style="color: #010001"&gt;ConvertColor&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;/span&gt;&lt;span style="color: green"&gt;// Convert the Colors from a Dark Scheme, to a White Scheme&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: blue"&gt;switch&lt;/span&gt;&lt;span style="color: black"&gt; (&lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt;) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#ff8000&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;blue&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: green"&gt;// Reserved Words&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#fefffe&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#010001&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: green"&gt;// Regular Text&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#808080&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;green&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: green"&gt;// Comments&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#ffffff&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;black&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: green"&gt;//;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#ffff00&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;:&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #010001"&gt;htmlColor&lt;/span&gt;&lt;span style="color: black"&gt; = &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;#2b91af&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;span style="color: green"&gt;//class Names&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;&lt;span style="color: black"&gt;;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt
