<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>What did you learn today? - DotNet</title>
    <link>http://blog.philknows.net/</link>
    <description>Phil Denoncourt's Technology Rants</description>
    <language>en-us</language>
    <copyright>Phil Denoncourt III</copyright>
    <lastBuildDate>Tue, 06 Jan 2009 13:35:57 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>phil@denoncourtassociates.com</managingEditor>
    <webMaster>phil@denoncourtassociates.com</webMaster>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=0aa7d1a8-7ad4-4140-8d60-51f7deed0846</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx</pingback:target>
      <dc:creator>Phil Denoncourt</dc:creator>
      <wfw:comment>http://blog.philknows.net/CommentView,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0aa7d1a8-7ad4-4140-8d60-51f7deed0846</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The 1st New Hampshire Code Camp is being help Saturday, Feb 28th at <a href="http://www.dwc.edu/">Daniel
Webster College</a>.  Registration is now open at <a href="http://www.thedevcommunity.org/">http://www.thedevcommunity.org/</a>. 
We're looking for developers or DBAs to present at this event.  We're also looking
for component vendors or recruitment firms to sponsor the event with giveaways, or
to help cover food costs. (Contact me - <a href="mailto:phil@denoncourtassociates.com">phil@denoncourtassociates.com</a> or <a href="mailto:ptormey@4square.net">Pat
Tormey</a>)
</p>
        <p>
I love going to code camps, I always learn a lot about technologies that I don't get
to use in my day-to-day life.  It's nice to network with other developers, learn
what problems they're running into and how they're solving them.  The <a href="http://www.thedevcommunity.org/CodeCamps/Manifesto.aspx">manifesto</a> describes
it best: By and For the Developer Community, Always Free, No Fluff...
</p>
        <p>
With the economy in apparent decline, a lot of you developers are looking for ways
to make yourselves more marketable.  According to ToastMasters International,
presentation skills are "crucial to success in the workplace".  Code Camps are
a great way to start refining your speaking skills.  Nobody expects a polished
speaker.  All we're looking for is someone to show us some code, help facilitate
a conversation, or show us something new.  If you get nervous when you speak
in front of people and that's deterring you, partner up with a buddy to deliver the
talk with you. Presentations should go about an hour, and budget time for dialog/Q&amp;A.
</p>
        <p>
Here's how to register to speak at the NH Code Camp:<br />
1) Create an account at <a href="http://thedevcommunity.org">thedevcommunity.org</a>,
or sign into your existing one.<br />
2) Complete a Speaker Registry profile<br />
3) On <a href="http://thedevcommunity.org">thedevcommunity.org</a> 's home page, click
the submit a presentation link next to Code Camp New Hampshire<br />
4) Repeat (as necessary)
</p>
        <p>
Looking forward to seeing you all there...
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=0aa7d1a8-7ad4-4140-8d60-51f7deed0846" />
      </body>
      <title>Call for Speakers - Code Camp New Hampshire</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx</link>
      <pubDate>Tue, 06 Jan 2009 13:35:57 GMT</pubDate>
      <description>&lt;p&gt;
The 1st New Hampshire Code Camp is being help Saturday, Feb 28th at &lt;a href="http://www.dwc.edu/"&gt;Daniel
Webster College&lt;/a&gt;.&amp;nbsp; Registration is now open at &lt;a href="http://www.thedevcommunity.org/"&gt;http://www.thedevcommunity.org/&lt;/a&gt;.&amp;nbsp;
We're looking for developers or DBAs to present at this event.&amp;nbsp; We're also looking
for component vendors or recruitment firms to sponsor the event with giveaways, or
to help cover food costs. (Contact me - &lt;a href="mailto:phil@denoncourtassociates.com"&gt;phil@denoncourtassociates.com&lt;/a&gt; or &lt;a href="mailto:ptormey@4square.net"&gt;Pat
Tormey&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
I love going to code camps, I always learn a lot about technologies that I don't get
to use in my day-to-day life.&amp;nbsp; It's nice to network with other developers, learn
what problems they're running into and how they're solving them.&amp;nbsp; The &lt;a href="http://www.thedevcommunity.org/CodeCamps/Manifesto.aspx"&gt;manifesto&lt;/a&gt; describes
it best: By and For the Developer Community, Always Free, No Fluff...
&lt;/p&gt;
&lt;p&gt;
With the economy in apparent decline, a lot of you developers are looking for ways
to make yourselves more marketable.&amp;nbsp; According to ToastMasters International,
presentation skills are "crucial to success in the workplace".&amp;nbsp; Code Camps are
a great way to start refining your speaking skills.&amp;nbsp; Nobody expects a polished
speaker.&amp;nbsp; All we're looking for is someone to show us some code, help facilitate
a conversation, or show us something new.&amp;nbsp; If you get nervous when you speak
in front of people and that's deterring you, partner up with a buddy to deliver the
talk with you. Presentations should go about an hour, and budget time for dialog/Q&amp;amp;A.
&lt;/p&gt;
&lt;p&gt;
Here's how to register to speak at the NH Code Camp:&lt;br&gt;
1) Create an account at &lt;a href="http://thedevcommunity.org"&gt;thedevcommunity.org&lt;/a&gt;,
or sign into your existing one.&lt;br&gt;
2) Complete a Speaker Registry profile&lt;br&gt;
3) On &lt;a href="http://thedevcommunity.org"&gt;thedevcommunity.org&lt;/a&gt; 's home page, click
the submit a presentation link next to Code Camp New Hampshire&lt;br&gt;
4) Repeat (as necessary)
&lt;/p&gt;
&lt;p&gt;
Looking forward to seeing you all there...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=0aa7d1a8-7ad4-4140-8d60-51f7deed0846" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,0aa7d1a8-7ad4-4140-8d60-51f7deed0846.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
      <category>Speaking Engagements</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=7a8cff86-cd5e-47bc-b041-26ae85908cb4</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx</pingback:target>
      <dc:creator>Phil Denoncourt</dc:creator>
      <wfw:comment>http://blog.philknows.net/CommentView,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7a8cff86-cd5e-47bc-b041-26ae85908cb4</wfw:commentRss>
      <title>Static Fields in Derived Types</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx</link>
      <pubDate>Wed, 08 Oct 2008 20:08:08 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
There really is a single instance of a static field per appdomain. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;It
kind of says this in the C# language reference, but not very explicitly. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;This
knocked me around a little because I had assumed that there was a single static field
per type within an appdomain. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;I had a base
type that had a dictionary as a static field and assumed that each class that derived
from it had its own instance of the static field. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Not
so…
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Look at the following test code:
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; System;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; System.Collections.Generic;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;using&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; System.Text;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;?xml:namespace prefix = o /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;namespace&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; ConsoleApplication3&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Program&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt;&lt;?xml:namespace prefix = st1 /&gt; 
&lt;st1:place w:st="on"&gt;Main&lt;/st1:place&gt;
(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;baseClass&lt;/span&gt;.AStaticValue
= 3;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;inheritedClass&lt;/span&gt;.AStaticValue
= 4;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"baseClass
{0}"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;baseClass&lt;/span&gt;.AStaticValue);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;"inheritedClass
{0}"&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;inheritedClass&lt;/span&gt;.AStaticValue);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadLine();&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;
&lt;o:p&gt;
&lt;br&gt;
&lt;/o:p&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;baseClass&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;static&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; AStaticValue
= 0;&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;inheritedClass&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;baseClass&lt;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;{&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-layout-grid-align: none"&gt;
&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
I expected the results to be 
&lt;br&gt;
baseClass 3&lt;br&gt;
inheritedClass 4
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
Instead, the output is&lt;br&gt;
baseClass 4&lt;br&gt;
inheritedClass 4
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
So unless you decorate the field with &lt;a href="http://msdn.microsoft.com/en-us/library/system.threadstaticattribute.aspx"&gt;ThreadStatic&lt;/a&gt; or &lt;a href="http://www.sirius.com/sirius/servlet/MediaPlayer?activity=selectTab&amp;tab=music&amp;stream=thebeat&amp;genre=electronicdanceSIR&amp;category=music&amp;token=85780178a50e61751386f771ec4d53bhttp://msdn.microsoft.com/en-us/library/system.contextstaticattribute.aspx"&gt;ContextStatic&lt;/a&gt; attributes,
static means just one in an appdomain. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Remember
that when you are inheriting from objects that have static fields, there’s only one
instance of that static field.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=7a8cff86-cd5e-47bc-b041-26ae85908cb4" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,7a8cff86-cd5e-47bc-b041-26ae85908cb4.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=cc1eee3d-00b2-449d-a466-f652d7cb1f3b</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx</pingback:target>
      <dc:creator>Phil Denoncourt</dc:creator>
      <wfw:comment>http://blog.philknows.net/CommentView,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cc1eee3d-00b2-449d-a466-f652d7cb1f3b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Part of the .NET 3.0 release was the <a href="http://msdn.microsoft.com/en-us/library/system.speech.recognition.aspx">System.Speech</a> namespace. 
This gives you easy access to powerful speech capabilities.  Text to Speech,
Speech Recognition, and Dictation are all part of this library.  I've tried speech
recognition every 5 years or so, and it has always worked, but it never allowed me
to work faster than just using my keyboard.
</p>
        <p>
As a consultant, I work on a variety of different machines.  Sometimes just my
laptop, sometimes my laptop with an external monitor, and other times a dual monitor
system.  Pictured below is how I set it up on my laptop.  
</p>
        <p>
          <img src="http://blog.philknows.net/content/binary/vsproject.jpg" border="0" />
        </p>
        <p>
Most panels are auto hide so that I can maximize the amount of space to view the code. 
Getting to the solution explorer means I have to take my hands off the keyboard, and
go to the mouse to select the tab.  There are keyboard shortcuts, but I either
don't remember all of them, or they don't work in all types of documents.
</p>
        <p>
Since speech recognition is so easy to use with the system.speech dll, and Visual
Studio addins aren't rocket science either, I built an addin that enables speech recognition
within Visual Studio.  Basically, the addin maps a list of words, that when
recognized, execute a command in the Command Window.  So, when I need to quickly
look at the task list, I don't have to remember the keyboard shortcut, or mouse to
it.  I just speak "Task List".  When I need the toolbox, I say, "Toolbox". 
I didn't get into dictation, because I don't think it is efficient to speak "for space
open parenthesis int i space equal space zero semicolon i less than items
period count semicolon i plus plus close parenthesis open curly brace..."
</p>
        <p>
I uploaded the source and an installer <a href="http://www.codeplex.com/thirdhand">here</a> on
CodePlex.  Because (I think) Visual Studio 2005 only works with addins written
in .NET 2.0, this only works for VS 2008.  Try it out and let me know how it
works.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=cc1eee3d-00b2-449d-a466-f652d7cb1f3b" />
      </body>
      <title>Using Speech in Visual Studio</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx</link>
      <pubDate>Wed, 23 Jul 2008 19:13:18 GMT</pubDate>
      <description>&lt;p&gt;
Part of the .NET 3.0 release was the &lt;a href="http://msdn.microsoft.com/en-us/library/system.speech.recognition.aspx"&gt;System.Speech&lt;/a&gt; namespace.&amp;nbsp;
This gives you easy access to powerful speech capabilities.&amp;nbsp; Text to Speech,
Speech Recognition, and Dictation are all part of this library.&amp;nbsp; I've tried speech
recognition every 5 years or so, and it has always worked, but it never allowed me
to work faster than just using my keyboard.
&lt;/p&gt;
&lt;p&gt;
As a consultant, I work on a variety of different machines.&amp;nbsp; Sometimes just my
laptop, sometimes my laptop with an external monitor, and other times a dual monitor
system.&amp;nbsp; Pictured below is how I set it up on my laptop.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.philknows.net/content/binary/vsproject.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Most panels are auto hide so that I can maximize the amount of space to view the code.&amp;nbsp;
Getting to the solution explorer means I have to take my hands off the keyboard, and
go to the mouse to select the tab.&amp;nbsp; There are keyboard shortcuts, but I either
don't remember all of them, or they don't work in all types of documents.
&lt;/p&gt;
&lt;p&gt;
Since speech recognition is so easy to use with the system.speech dll, and Visual
Studio addins aren't rocket science either, I built an addin that enables speech recognition
within Visual Studio.&amp;nbsp; Basically, the addin maps a list of&amp;nbsp;words, that when
recognized, execute a command in the Command Window.&amp;nbsp; So, when I need to quickly
look at the task list, I don't have to remember the keyboard shortcut, or mouse to
it.&amp;nbsp; I just speak "Task List".&amp;nbsp; When I need the toolbox, I say, "Toolbox".&amp;nbsp;
I didn't get into dictation, because I don't think it is efficient to speak "for space
open parenthesis int i&amp;nbsp;space equal space zero&amp;nbsp;semicolon i less than items
period count semicolon i plus plus close parenthesis open curly brace..."
&lt;/p&gt;
&lt;p&gt;
I uploaded the source and an installer&amp;nbsp;&lt;a href="http://www.codeplex.com/thirdhand"&gt;here&lt;/a&gt; on
CodePlex.&amp;nbsp; Because (I think) Visual Studio 2005 only works with addins written
in .NET 2.0, this only works for VS 2008.&amp;nbsp; Try it out and let me know how it
works.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=cc1eee3d-00b2-449d-a466-f652d7cb1f3b" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,cc1eee3d-00b2-449d-a466-f652d7cb1f3b.aspx</comments>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=6c8991a7-d35c-4809-8d88-29df801c271d</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx</pingback:target>
      <dc:creator>Phil Denoncourt</dc:creator>
      <wfw:comment>http://blog.philknows.net/CommentView,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6c8991a7-d35c-4809-8d88-29df801c271d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Me either.  See <a href="http://msdn.microsoft.com/en-us/library/6x6y6z4d(VS.80).aspx" target="_blank">here</a> in
the C# Language Reference.  This means you can overload the operators for your
classes.  The example on MSDN talks about classes that have a true, false, or
null (neither true nor false) state.  You could also create a type that can be
both true <u>and</u> false.
</p>
        <p>
Overloading operators can lead to code that is difficult to read.  You should
only overload operators when it makes sense to do it.  If it is unclear what
“if (myType)” means, don’t overload the operators.
</p>
        <p>
I wrote a small rules engine for a company a while back and this would have been helpful. 
Supplemental rules were implemented as separate classes so that they could be dynamically
strung together in different orders as the business logic changed.
</p>
        <p>
Here’s a contrived sample using the true/false operators:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">class</span> Customer
{ <span class="kwrd">public</span><span class="kwrd">string</span> CustomerName {
get; set; } <span class="kwrd">public</span><span class="kwrd">string</span> EmailAddress
{ get; set; } <span class="kwrd">public</span><span class="kwrd">decimal</span> OutstandingBalance
{ get; set; } } <span class="kwrd">public</span><span class="kwrd">class</span> CustomerIsGoodRule
{ <span class="kwrd">public</span> CustomerIsGoodRule(Customer customer) { <span class="kwrd">this</span>.Customer
= customer; } Customer Customer { get; set; } <span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">bool</span><span class="kwrd">operator</span><span class="kwrd">true</span>(CustomerIsGoodRule
theCustomer) { <span class="kwrd">return</span> (theCustomer.Customer.OutstandingBalance
&lt;= 0); } <span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">bool</span><span class="kwrd">operator</span><span class="kwrd">false</span>(CustomerIsGoodRule
theCustomer) { <span class="kwrd">return</span> (theCustomer.Customer.OutstandingBalance
&gt; 0); } } <span class="kwrd"> class</span> Program { <span class="kwrd">static</span><span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args) { Customer c = <span class="kwrd">new</span> Customer(); c.CustomerName = <span class="str">"Joanne
Doe"</span>; c.EmailAddress = <span class="str">"joannedoe@mailinator.com"</span>;
c.OutstandingBalance = 25; CustomerIsGoodRule cigr = <span class="kwrd">new</span> CustomerIsGoodRule(c); <span class="kwrd">if</span> (cigr)
{ SendNewCatalog(); } <span class="kwrd">else</span> { SendNewStatement(); } } }</pre>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
One thing to keep in mind is that if you provide a definition for true, you must also
provide one for false.  Also notice that the logical negation operator (!) was
not overriden, so a statement like if (!cigr) fails to compile.
</p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=6c8991a7-d35c-4809-8d88-29df801c271d" />
      </body>
      <title>Did you know true/false are C# operators?</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx</link>
      <pubDate>Tue, 10 Jun 2008 12:04:08 GMT</pubDate>
      <description>&lt;p&gt;
Me either.&amp;nbsp; See &lt;a href="http://msdn.microsoft.com/en-us/library/6x6y6z4d(VS.80).aspx" target="_blank"&gt;here&lt;/a&gt; in
the C# Language Reference.&amp;nbsp; This means you can overload the operators for your
classes.&amp;nbsp; The example on MSDN talks about classes that have a true, false, or
null (neither true nor false) state.&amp;nbsp; You could also create a type that can be
both true &lt;u&gt;and&lt;/u&gt; false.
&lt;/p&gt;
&lt;p&gt;
Overloading operators can lead to code that is difficult to read.&amp;nbsp; You should
only overload operators when it makes sense to do it.&amp;nbsp; If it is unclear what
“if (myType)” means, don’t overload the operators.
&lt;/p&gt;
&lt;p&gt;
I wrote a small rules engine for a company a while back and this would have been helpful.&amp;nbsp;
Supplemental rules were implemented as separate classes so that they could be dynamically
strung together in different orders as the business logic changed.
&lt;/p&gt;
&lt;p&gt;
Here’s a contrived sample using the true/false operators:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Customer
{ &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; CustomerName {
get; set; } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; EmailAddress
{ get; set; } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; OutstandingBalance
{ get; set; } } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomerIsGoodRule
{ &lt;span class="kwrd"&gt;public&lt;/span&gt; CustomerIsGoodRule(Customer customer) { &lt;span class="kwrd"&gt;this&lt;/span&gt;.Customer
= customer; } Customer Customer { get; set; } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;(CustomerIsGoodRule
theCustomer) { &lt;span class="kwrd"&gt;return&lt;/span&gt; (theCustomer.Customer.OutstandingBalance
&amp;lt;= 0); } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; &lt;span class="kwrd"&gt;operator&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;(CustomerIsGoodRule
theCustomer) { &lt;span class="kwrd"&gt;return&lt;/span&gt; (theCustomer.Customer.OutstandingBalance
&amp;gt; 0); } } &lt;span class="kwrd"&gt; class&lt;/span&gt; Program { &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[]
args) { Customer c = &lt;span class="kwrd"&gt;new&lt;/span&gt; Customer(); c.CustomerName = &lt;span class="str"&gt;"Joanne
Doe"&lt;/span&gt;; c.EmailAddress = &lt;span class="str"&gt;"joannedoe@mailinator.com"&lt;/span&gt;;
c.OutstandingBalance = 25; CustomerIsGoodRule cigr = &lt;span class="kwrd"&gt;new&lt;/span&gt; CustomerIsGoodRule(c); &lt;span class="kwrd"&gt;if&lt;/span&gt; (cigr)
{ SendNewCatalog(); } &lt;span class="kwrd"&gt;else&lt;/span&gt; { SendNewStatement(); } } }&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
One thing to keep in mind is that if you provide a definition for true, you must also
provide one for false.&amp;nbsp; Also notice that the logical negation operator (!) was
not overriden, so a statement like if (!cigr) fails to compile.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=6c8991a7-d35c-4809-8d88-29df801c271d" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,6c8991a7-d35c-4809-8d88-29df801c271d.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=1a03f847-457a-45ad-9191-15b1f7c36fdb</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,1a03f847-457a-45ad-9191-15b1f7c36fdb.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,1a03f847-457a-45ad-9191-15b1f7c36fdb.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1a03f847-457a-45ad-9191-15b1f7c36fdb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font face="Verdana,Arial,Helvetica,sans-serif" size="3">Last
night I posted a webcontrol that I wrote to my <a href="http://www.denoncourtassociates.com/Default.aspx?tabid=60" target="_blank">website</a> that
makes life more difficult for spammers. It's a substitute for hyperlink control in
ASP.NET named the obscure hyperlink control<br /><br />
One of the ways that spammers get email addresses is that they have programs that
spider the web, looking for email addresses embedded in webpages. They target forum
based sites because people are more likely to leave their email addresses there. This
has caused people to start leaving their email addresses in cryptic formats (for example:
me {at} mydomain.com). I find these techniques annoying as an end user trying to contact
someone, but I also have to believe that spammers have caught on and look for variants
with the word "at" in them. The obscure hyperlink control can be used for any hyperlink,
mailto or http. Besides thwarting spammers, another use of the control would be to
link to an objectionable site without contributing to its search engine rank.<br /><br />
What the obscure hyperlink control does is scrambles (note - I'm not saying <i>encrypt</i>)
the hyperlink when the page is being created on the webserver using a random technique.
An scrambled example of my email address is 'mcstiostucoe@ipolamit:hldnnorascae.o'.
You can see a functioning example <a href="http://www.denoncourtassociates.com/Default.aspx?tabid=60" target="_blank">here</a>.
A matching javascript function is added to the webpage that unscrambles the hyperlink
when the user clicks on it. When you view the source of the webpage, the link is removed,
and an onClick handler is added to the hyperlink. Nowhere will you see the text of
the hyperlink. It is present in the onClick handler, but it is not very legible. The
Url is not stored in Viewstate, so it can't be taken from there, either.<br /><br />
Here are pros &amp; cons of this control:<br />
Pros:<br /><ul><li>
Easy to use (works exactly the same as the existing hyperlink control) 
</li><li>
The hyperlink information is not in the href attribute, but in the onClick (an area
that spammers don't always pay atttention to) 
</li><li>
The diversity of scrambling algorithms makes it difficult for spammers to target a
specific implementation 
</li><li>
Doesn't require a lot of server resources</li></ul>
Cons:<br /><ul><li>
Doesn't completely prevent spammers from getting email addresses. A determined spammer
could reverse engineer the control. This is just adds a roadblock for spammers. 
</li><li>
Requires that the user's browser supports javascript and that it is enabled. 
</li><li>
Limited number of scrambling algorithms. Right now there are 5. If this fills a need,
I intend to add more, but it will still be a finite number.</li></ul></font>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=1a03f847-457a-45ad-9191-15b1f7c36fdb" />
      </body>
      <title>Help in the fight against spam</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,1a03f847-457a-45ad-9191-15b1f7c36fdb.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,1a03f847-457a-45ad-9191-15b1f7c36fdb.aspx</link>
      <pubDate>Thu, 27 Oct 2005 16:02:31 GMT</pubDate>
      <description>&lt;font face=Verdana,Arial,Helvetica,sans-serif size=3&gt;Last night I posted a webcontrol
that I wrote to my &lt;a href="http://www.denoncourtassociates.com/Default.aspx?tabid=60" target=_blank&gt;website&lt;/a&gt; that
makes life more difficult for spammers. It's a substitute for hyperlink control in
ASP.NET named the obscure hyperlink control&lt;br&gt;
&lt;br&gt;
One of the ways that spammers get email addresses is that they have programs that
spider the web, looking for email addresses embedded in webpages. They target forum
based sites because people are more likely to leave their email addresses there. This
has caused people to start leaving their email addresses in cryptic formats (for example:
me {at} mydomain.com). I find these techniques annoying as an end user trying to contact
someone, but I also have to believe that spammers have caught on and look for variants
with the word "at" in them. The obscure hyperlink control can be used for any hyperlink,
mailto or http. Besides thwarting spammers, another use of the control would be to
link to an objectionable site without contributing to its search engine rank.&lt;br&gt;
&lt;br&gt;
What the obscure hyperlink control does is scrambles (note - I'm not saying &lt;i&gt;encrypt&lt;/i&gt;)
the hyperlink when the page is being created on the webserver using a random technique.
An scrambled example of my email address is 'mcstiostucoe@ipolamit:hldnnorascae.o'.
You can see a functioning example &lt;a href="http://www.denoncourtassociates.com/Default.aspx?tabid=60" target=_blank&gt;here&lt;/a&gt;.
A matching javascript function is added to the webpage that unscrambles the hyperlink
when the user clicks on it. When you view the source of the webpage, the link is removed,
and an onClick handler is added to the hyperlink. Nowhere will you see the text of
the hyperlink. It is present in the onClick handler, but it is not very legible. The
Url is not stored in Viewstate, so it can't be taken from there, either.&lt;br&gt;
&lt;br&gt;
Here are pros &amp;amp; cons of this control:&lt;br&gt;
Pros:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Easy to use (works exactly the same as the existing hyperlink control) 
&lt;li&gt;
The hyperlink information is not in the href attribute, but in the onClick (an area
that spammers don't always pay atttention to) 
&lt;li&gt;
The diversity of scrambling algorithms makes it difficult for spammers to target a
specific implementation 
&lt;li&gt;
Doesn't require a lot of server resources&lt;/li&gt;
&lt;/ul&gt;
Cons:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Doesn't completely prevent spammers from getting email addresses. A determined spammer
could reverse engineer the control. This is just adds a roadblock for spammers. 
&lt;li&gt;
Requires that the user's browser supports javascript and that it is enabled. 
&lt;li&gt;
Limited number of scrambling algorithms. Right now there are 5. If this fills a need,
I intend to add more, but it will still be a finite number.&lt;/li&gt;
&lt;/ul&gt;
&lt;/font&gt;&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=1a03f847-457a-45ad-9191-15b1f7c36fdb" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,1a03f847-457a-45ad-9191-15b1f7c36fdb.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
      <category>ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">Visual Studio 2003 stores Reference paths for projects in the .User
file. Not in the csproj file. I can't see why they wanted to store that information
in a separate file. The settings pertain only to the specific project. Anyway, if
your application's build is dependant upon having the reference paths set, make sure
you are adding the .User files to your source control system. The csproj file is not
enough. </font>
        </p>
        <p>
          <font size="3">Normally you can find the .User file in the same directory as the project
file... Unless it is a web application/service. Then you will find the file in the
VSWebCache folder. Which makes it very difficult to put that file under source control.
I don't see a good solution to this problem. Maybe porting the build to use </font>
          <a href="http://nant.sourceforge.net/" target="_blank">
            <font size="3">NAnt</font>
          </a>
          <font size="3">.
Although that would be burdensome if we just wanted to debug the project.  </font>
        </p>
        <p>
          <font size="3">I guess the best solution is to architect your project so that it isn't
dependant on a reference path.</font>
        </p>
        <p>
          <img src="http://blog.denoncourtassociates.com/content/binary/RefPath.jpg" border="0" />
        </p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0" />
      </body>
      <title>Reference Paths and Web Projects</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0.aspx</link>
      <pubDate>Wed, 19 Oct 2005 21:27:33 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font size=3&gt;Visual Studio 2003 stores Reference paths for projects in the .User file.
Not in the csproj file. I can't see why they wanted to store that information in a
separate file. The settings pertain only to the specific project. Anyway, if your
application's build is dependant upon having the reference paths set, make sure you
are adding the .User files to your source control system. The csproj file is not enough. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;Normally you can find the .User file in the same directory as the project
file... Unless it is a web application/service. Then you will find the file in the
VSWebCache folder. Which makes it very difficult to put that file under source control.
I don't see a good solution to this problem. Maybe porting the build to use &lt;/font&gt;&lt;a href="http://nant.sourceforge.net/" target=_blank&gt;&lt;font size=3&gt;NAnt&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;.
Although that would be burdensome if we just wanted to debug the project.&amp;nbsp; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=3&gt;I guess the best solution is to architect your project so that it isn't
dependant on a reference path.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.denoncourtassociates.com/content/binary/RefPath.jpg" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,9c09ae4b-3153-4c6e-aac4-0549f2d0c0b0.aspx</comments>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=4ade8817-5242-45f4-89ad-78d706337f8a</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,4ade8817-5242-45f4-89ad-78d706337f8a.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,4ade8817-5242-45f4-89ad-78d706337f8a.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4ade8817-5242-45f4-89ad-78d706337f8a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font face="Verdana,Arial,Helvetica,sans-serif" size="3">Nowadays
there is a lot of discussion about <a href="http://en.wikipedia.org/wiki/Test_driven_development" target="_blank">TDD
(Test Driven Development).</a> While I think that anything that forces developers
to pay more attention to testing their code is a good thing, I am not convinced that
TDD is going to reduce my defect rate. My methodology is to write the code for a problem,
document it, ruggedize (add range checks, errorhandling, and verify that resources
will always be released), and then write unit tests.<br /><br />
When I talk about unit tests to developers, with the goal of trying to get them to
place their unit tests in a unit testing framework like <a href="http://www.nunit.org/" target="_blank">nUnit</a>,
there is a tendency for them to balk. "You want me to spend time writing code that
an end user will never run" (read - Can I bill for that?), or "That would mean we'd
have to start managing our previously disposable test harness code" (read - That means
if I change my interface, the test code won't compile), or "Who is going to test the
test code?" (read - I'm skeptical this will work and I'm trying to get out of doing
this)<br /><br />
My experience with the three projects I've implemented full unit testing is that it
is well worth the effort. Obviously, there is going to be more overhead when building
the first version. However, it has saved me tremendous time when deploying the 2nd,
3rd, 4th.... time. Not only am I able to test the new features quickly, I can run
the entire battery to make sure that I didn't break something when adding a new feature. 
<br /><br />
There is a utility called <a href="http://projectdistributor.net/Projects/Project.aspx?projectId=44" target="_blank">"Reflector
Graph"</a> that writes test skeletons for you. It is an addin to <a href="http://www.aisto.com/roeder/dotnet/" target="_blank">reflector</a>.
To generate a test skeleton, make sure you add the addin to reflector. Find the class
you want to create a test for; right click and select Code Generation. On the drop
down, select which type of object you are interested in. </font>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=4ade8817-5242-45f4-89ad-78d706337f8a" />
      </body>
      <title>Generating Test Skeletons</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,4ade8817-5242-45f4-89ad-78d706337f8a.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,4ade8817-5242-45f4-89ad-78d706337f8a.aspx</link>
      <pubDate>Mon, 17 Oct 2005 17:23:57 GMT</pubDate>
      <description>&lt;font face="Verdana,Arial,Helvetica,sans-serif" size="3"&gt;Nowadays there is a lot of
discussion about &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development" target="_blank"&gt;TDD
(Test Driven Development).&lt;/a&gt; While I think that anything that forces developers
to pay more attention to testing their code is a good thing, I am not convinced that
TDD is going to reduce my defect rate. My methodology is to write the code for a problem,
document it, ruggedize (add range checks, errorhandling, and verify that resources
will always be released), and then write unit tests.&lt;br&gt;
&lt;br&gt;
When I talk about unit tests to developers, with the goal of trying to get them to
place their unit tests in a unit testing framework like &lt;a href="http://www.nunit.org/" target="_blank"&gt;nUnit&lt;/a&gt;,
there is a tendency for them to balk. "You want me to spend time writing code that
an end user will never run" (read - Can I bill for that?), or "That would mean we'd
have to start managing our previously disposable test harness code" (read - That means
if I change my interface, the test code won't compile), or "Who is going to test the
test code?" (read - I'm skeptical this will work and I'm trying to get out of doing
this)&lt;br&gt;
&lt;br&gt;
My experience with the three projects I've implemented full unit testing is that it
is well worth the effort. Obviously, there is going to be more overhead when building
the first version. However, it has saved me tremendous time when deploying the 2nd,
3rd, 4th.... time. Not only am I able to test the new features quickly, I can run
the entire battery to make sure that I didn't break something when adding a new feature. 
&lt;br&gt;
&lt;br&gt;
There is a utility called &lt;a href="http://projectdistributor.net/Projects/Project.aspx?projectId=44" target="_blank"&gt;"Reflector
Graph"&lt;/a&gt; that writes test skeletons for you. It is an addin to &lt;a href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;reflector&lt;/a&gt;.
To generate a test skeleton, make sure you add the addin to reflector. Find the class
you want to create a test for; right click and select Code Generation. On the drop
down, select which type of object you are interested in. &lt;/font&gt;&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=4ade8817-5242-45f4-89ad-78d706337f8a" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,4ade8817-5242-45f4-89ad-78d706337f8a.aspx</comments>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=d5faa2ea-c210-4b10-ac4d-6f0919fb45f6</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,d5faa2ea-c210-4b10-ac4d-6f0919fb45f6.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,d5faa2ea-c210-4b10-ac4d-6f0919fb45f6.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d5faa2ea-c210-4b10-ac4d-6f0919fb45f6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="3">I've given a </font>
          <a href="http://www.denoncourtassociates.com/LinkClick.aspx?link=Introduction+to+Code+Access+Security.ppt&amp;mid=337" target="_blank">
            <font size="3">introductory
talk on Code Access Security </font>
          </a>
          <font size="3">a few times now. As I'm showing
all the pieces from an administrative point of view (Code Groups, PermissionSets),
and I go to create a code group, there is an option in the wizard that allows you
to import the settings from an XML file. People listening to my talk always, without
fail, ask, "How can I generate that XML file". It's fustrating, because there is no
clear way to do. No menu option, no command line utility. I alway mean to research
how to do it, but never seem to find the time. A couple of nights ago, I looked into
it. It turns out on each PermissionSet, or CodeGroup, there is a </font>
          <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritypermissionsetclasstoxmltopic.asp" target="_blank">
            <font size="3">ToXml</font>
          </a>
          <font size="3"> method.
Since it appears the only way to get the XML is using that method, I wrote a utility
that will export the XML to a file. You can download it </font>
          <a href="http://www.denoncourtassociates.com/LinkClick.aspx?link=ExportCASXml.msi&amp;mid=387" target="_blank">
            <font size="3">here</font>
          </a>
          <font size="3">.</font>
        </p>
        <p>
          <img src="http://blog.denoncourtassociates.com/content/binary/Export.jpg" border="0" />
        </p>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=d5faa2ea-c210-4b10-ac4d-6f0919fb45f6" />
      </body>
      <title>Exporting Code Access Security settings to an XML file</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,d5faa2ea-c210-4b10-ac4d-6f0919fb45f6.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,d5faa2ea-c210-4b10-ac4d-6f0919fb45f6.aspx</link>
      <pubDate>Fri, 07 Oct 2005 13:09:30 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font size=3&gt;I've given a &lt;/font&gt;&lt;a href="http://www.denoncourtassociates.com/LinkClick.aspx?link=Introduction+to+Code+Access+Security.ppt&amp;amp;mid=337" target=_blank&gt;&lt;font size=3&gt;introductory
talk on Code Access Security &lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;a few times now. As I'm showing
all the pieces from an administrative point of view (Code Groups, PermissionSets),
and I go to create a code group, there is an option in the wizard that allows you
to import the settings from an XML file. People listening to my talk always, without
fail, ask, "How can I generate that XML file". It's fustrating, because there is no
clear way to do. No menu option, no command line utility. I alway mean to research
how to do it, but never seem to find the time. A couple of nights ago, I looked into
it. It turns out on each PermissionSet, or CodeGroup, there is a &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemsecuritypermissionsetclasstoxmltopic.asp" target=_blank&gt;&lt;font size=3&gt;ToXml&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt; method.
Since it appears the only way to get the XML is using that method, I wrote a utility
that will export the XML to a file. You can download it &lt;/font&gt;&lt;a href="http://www.denoncourtassociates.com/LinkClick.aspx?link=ExportCASXml.msi&amp;amp;mid=387" target=_blank&gt;&lt;font size=3&gt;here&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;.&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://blog.denoncourtassociates.com/content/binary/Export.jpg" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=d5faa2ea-c210-4b10-ac4d-6f0919fb45f6" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,d5faa2ea-c210-4b10-ac4d-6f0919fb45f6.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=152c215d-5af1-4ba1-be0e-d23d2e85612e</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,152c215d-5af1-4ba1-be0e-d23d2e85612e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,152c215d-5af1-4ba1-be0e-d23d2e85612e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=152c215d-5af1-4ba1-be0e-d23d2e85612e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3">Arg!! Serves me right for
not reading the documentation and assuming the way a component works. I have a test
framework that I use to generate random data when running unit tests on the data layer.
I don't care what the data looks like as long as data is in fact saved. I use </font>
        <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemrandomclassnexttopic3.asp" target="_blank">
          <font size="3">Random.Next </font>
        </a>
        <font size="3">to
get a value that I use for a variety of purposes: Getting a letter, a number, or a
boolean value. To get a random boolean value, I was using this code:</font>
        <br />
        <pre>
          <font size="3">System.Random r = new Random(); bool tstResult = r.Next(0,1) ==0
? true : false;</font>
        </pre>
        <pre>
        </pre>
        <font size="3">The problem is that Random.Next will return a value &gt;= the first
parameter and &lt; the second parameter. So you can see that my routine always returns
true. I had assumed that the arguments were the range of numbers you were interested
in.</font>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=152c215d-5af1-4ba1-be0e-d23d2e85612e" />
      </body>
      <title>Random.Next</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,152c215d-5af1-4ba1-be0e-d23d2e85612e.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,152c215d-5af1-4ba1-be0e-d23d2e85612e.aspx</link>
      <pubDate>Tue, 04 Oct 2005 15:00:25 GMT</pubDate>
      <description>&lt;font size=3&gt;Arg!! Serves me right for not reading the documentation and assuming
the way a component works. I have a test framework that I use to generate random data
when running unit tests on the data layer. I don't care what the data looks like as
long as data is in fact saved. I use &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemrandomclassnexttopic3.asp" target=_blank&gt;&lt;font size=3&gt;Random.Next &lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;to
get a value that I use for a variety of purposes: Getting a letter, a number, or a
boolean value. To get a random boolean value, I was using this code:&lt;/font&gt;
&lt;br&gt;
&lt;pre&gt;&lt;font size=3&gt;System.Random r = new Random(); bool tstResult = r.Next(0,1) ==0
? true : false;&lt;/font&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;font size=3&gt;The problem is that Random.Next will return a value &amp;gt;= the first parameter
and &amp;lt; the second parameter. So you can see that my routine always returns true.
I had assumed that the arguments were the range of numbers you were interested in.&lt;/font&gt;&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=152c215d-5af1-4ba1-be0e-d23d2e85612e" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,152c215d-5af1-4ba1-be0e-d23d2e85612e.aspx</comments>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=ed2da501-6512-4119-b9f3-7ad8bbc2f885</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,ed2da501-6512-4119-b9f3-7ad8bbc2f885.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,ed2da501-6512-4119-b9f3-7ad8bbc2f885.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ed2da501-6512-4119-b9f3-7ad8bbc2f885</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3">There are a lot of areas
in the .NET framework that I haven't paid attention to because I don't have come across
a need for a particular area (the WMI stuff) and/or the area looked somewhat complicated.
In the XML Serialization engine, there is support for "Overrides". The serialization
that I had done to date had worked fine, so I glossed over these objects when I was
doing research.<br /><br />
I've written a data layer for my current project. It's a pretty robust data layer
if I do say so myself. It has support for parent/child relationships, data transactions,
delay loading, cascading deletes, exports to datasets and it's fully generated using
a code generator (</font>
        <a href="http://www.mygenerationsoftware.com" target="_blank">
          <font size="3">MyGeneration</font>
        </a>
        <font size="3">)....
It's really the Cadillac of data layers. 
<br /><br />
When an object is serialized, I prevent the serialization of child objects by adding
the [XMLIgnore] attribute to the child collection properties. I do this for performance
and size reasons. Because the data layer is </font>
        <a href="http://www.dofactory.com/Patterns/PatternProxy.aspx" target="_blank">
          <font size="3">delay
loaded</font>
        </a>
        <font size="3">, the collection might not be populated yet, causing
tremendous database activity when a developer decides to serialize the object. Also,
if you serialize an object high in the hierarchy, you would end up getting a hugely
sized piece of XML. The children of the children of the children would be included
in the document. After patting myself on the back for writing a fully featured, lightweight,
fast and consistent data layer quickly with relatively few defects, the need came
down for the objects to include all of their children in special circumstances...
But only select child objects, not all.<br /><br />
I gave this some thought over the weekend and resigned myself to the fact that I was
going to have to write some specialized method that serialized each object individually
and then molded all the results into one big XML document. After doing some more reading,
I came across the </font>
        <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlserializationxmlattributeoverridesclasstopic.asp" target="_blank">
          <font size="3">XmlAttributeOverrides</font>
        </a>
        <font size="3"> object.
This object allows you to selectively override XML serialization attributes that you
set for specific properties. Using this object, I created a serializer, told it which
additional properties I wanted serialized, and BAM!.. Done.</font>
        <br />
        <br />
        <br />
        <pre>
          <font color="#008000" size="3"> //Set up overrides</font>
          <br />
          <font size="3"> XmlAttributeOverrides overrides = </font>
          <font color="#0000ff" size="3">new</font>
          <font size="3"> XmlAttributeOverrides();<br /><br /></font>
          <font color="#008000" size="3">//ChildItems</font>
          <br />
          <font size="3"> XmlAttributes dontIgnore = </font>
          <font color="#0000ff" size="3">new</font>
          <font size="3"> XmlAttributes();<br />
dontIgnore.XmlIgnore=</font>
          <font color="#0000ff" size="3">false</font>
          <font size="3">;<br />
overrides.Add(</font>
          <font color="#0000ff" size="3">typeof</font>
          <font size="3">(ParentObject),"ChildItems",dontIgnore);</font>
          <font size="3"> XmlSerializer
xs = </font>
          <font color="#0000ff" size="3">new</font>
          <font size="3"> XmlSerializer(</font>
          <font color="#0000ff" size="3">typeof</font>
          <font size="3">(ParentObject),overrides);</font>
        </pre>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=ed2da501-6512-4119-b9f3-7ad8bbc2f885" />
      </body>
      <title>XML Overrides</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,ed2da501-6512-4119-b9f3-7ad8bbc2f885.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,ed2da501-6512-4119-b9f3-7ad8bbc2f885.aspx</link>
      <pubDate>Mon, 03 Oct 2005 20:25:06 GMT</pubDate>
      <description>&lt;font size=3&gt;There are a lot of areas in the .NET framework that I haven't paid attention
to because I don't have come across a need for a particular area (the WMI stuff) and/or
the area looked somewhat complicated. In the XML Serialization engine, there is support
for "Overrides". The serialization that I had done to date had worked fine, so I glossed
over these objects when I was doing research.&lt;br&gt;
&lt;br&gt;
I've written a data layer for my current project. It's a pretty robust data layer
if I do say so myself. It has support for parent/child relationships, data transactions,
delay loading, cascading deletes, exports to datasets and it's fully generated using
a code generator (&lt;/font&gt;&lt;a href="http://www.mygenerationsoftware.com" target=_blank&gt;&lt;font size=3&gt;MyGeneration&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;)....
It's really the Cadillac of data layers. 
&lt;br&gt;
&lt;br&gt;
When an object is serialized, I prevent the serialization of child objects by adding
the [XMLIgnore] attribute to the child collection properties. I do this for performance
and size reasons. Because the data layer is &lt;/font&gt;&lt;a href="http://www.dofactory.com/Patterns/PatternProxy.aspx" target=_blank&gt;&lt;font size=3&gt;delay
loaded&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;, the collection might not be populated yet, causing
tremendous database activity when a developer decides to serialize the object. Also,
if you serialize an object high in the hierarchy, you would end up getting a hugely
sized piece of XML. The children of the children of the children would be included
in the document. After patting myself on the back for writing a fully featured, lightweight,
fast and consistent data layer quickly with relatively few defects, the need came
down for the objects to include all of their children in special circumstances...
But only select child objects, not all.&lt;br&gt;
&lt;br&gt;
I gave this some thought over the weekend and resigned myself to the fact that I was
going to have to write some specialized method that serialized each object individually
and then molded all the results into one big XML document. After doing some more reading,
I came across the &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlserializationxmlattributeoverridesclasstopic.asp" target=_blank&gt;&lt;font size=3&gt;XmlAttributeOverrides&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt; object.
This object allows you to selectively override XML serialization attributes that you
set for specific properties. Using this object, I created a serializer, told it which
additional properties I wanted serialized, and BAM!.. Done.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;font color=#008000 size=3&gt; //Set up overrides&lt;/font&gt;
&lt;br&gt;
&lt;font size=3&gt; XmlAttributeOverrides overrides = &lt;/font&gt;&lt;font color=#0000ff size=3&gt;new&lt;/font&gt;&lt;font size=3&gt; XmlAttributeOverrides();&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font color=#008000 size=3&gt;//ChildItems&lt;/font&gt;
&lt;br&gt;
&lt;font size=3&gt; XmlAttributes dontIgnore = &lt;/font&gt;&lt;font color=#0000ff size=3&gt;new&lt;/font&gt;&lt;font size=3&gt; XmlAttributes();&lt;br&gt;
dontIgnore.XmlIgnore=&lt;/font&gt;&lt;font color=#0000ff size=3&gt;false&lt;/font&gt;&lt;font size=3&gt;;&lt;br&gt;
overrides.Add(&lt;/font&gt;&lt;font color=#0000ff size=3&gt;typeof&lt;/font&gt;&lt;font size=3&gt;(ParentObject),"ChildItems",dontIgnore);&lt;/font&gt; &lt;font size=3&gt; XmlSerializer
xs = &lt;/font&gt;&lt;font color=#0000ff size=3&gt;new&lt;/font&gt;&lt;font size=3&gt; XmlSerializer(&lt;/font&gt;&lt;font color=#0000ff size=3&gt;typeof&lt;/font&gt;&lt;font size=3&gt;(ParentObject),overrides);&lt;/font&gt; &lt;/pre&gt;
&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=ed2da501-6512-4119-b9f3-7ad8bbc2f885" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,ed2da501-6512-4119-b9f3-7ad8bbc2f885.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=f18ce395-ea67-4b99-8bca-7fe64937e9aa</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,f18ce395-ea67-4b99-8bca-7fe64937e9aa.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,f18ce395-ea67-4b99-8bca-7fe64937e9aa.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f18ce395-ea67-4b99-8bca-7fe64937e9aa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <font size="3">I was troubleshooting some
versioning problems we were having with a built; checking versions, strong name, modified
dates... One of the assemblies I came across had an assemblyversion of 0.0.0.0 . I
thought that was kind of funny, normally you see files with 1.0.0.0 or 0.9.0.0 or
1.0.12424.53264 . After researching it, the reason this assembly had zeros for the
version is because the developer removed AssemblyInfo.cs from the project. This caused
the assembly to be built without the AssemblyVersion attribute, leaving it with the
default 0.0.0.0 version.</font>
        <img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=f18ce395-ea67-4b99-8bca-7fe64937e9aa" />
      </body>
      <title>AssemblyInfo.cs</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,f18ce395-ea67-4b99-8bca-7fe64937e9aa.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,f18ce395-ea67-4b99-8bca-7fe64937e9aa.aspx</link>
      <pubDate>Sat, 01 Oct 2005 22:16:43 GMT</pubDate>
      <description>&lt;font size=3&gt;I was troubleshooting some versioning problems we were having with a
built; checking versions, strong name, modified dates... One of the assemblies I came
across had an assemblyversion of 0.0.0.0 . I thought that was kind of funny, normally
you see files with 1.0.0.0 or 0.9.0.0 or 1.0.12424.53264 . After researching it, the
reason this assembly had zeros for the version is because the developer removed AssemblyInfo.cs
from the project. This caused the assembly to be built without the AssemblyVersion
attribute, leaving it with the default 0.0.0.0 version.&lt;/font&gt;&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=f18ce395-ea67-4b99-8bca-7fe64937e9aa" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,f18ce395-ea67-4b99-8bca-7fe64937e9aa.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
    </item>
    <item>
      <trackback:ping>http://blog.philknows.net/Trackback.aspx?guid=08bc45a9-4aaf-45a4-82d3-4c0d1722a786</trackback:ping>
      <pingback:server>http://blog.philknows.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.philknows.net/PermaLink,guid,08bc45a9-4aaf-45a4-82d3-4c0d1722a786.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://blog.philknows.net/CommentView,guid,08bc45a9-4aaf-45a4-82d3-4c0d1722a786.aspx</wfw:comment>
      <wfw:commentRss>http://blog.philknows.net/SyndicationService.asmx/GetEntryCommentsRss?guid=08bc45a9-4aaf-45a4-82d3-4c0d1722a786</wfw:commentRss>
      <title>Switch statements in IL</title>
      <guid isPermaLink="false">http://blog.philknows.net/PermaLink,guid,08bc45a9-4aaf-45a4-82d3-4c0d1722a786.aspx</guid>
      <link>http://blog.philknows.net/PermaLink,guid,08bc45a9-4aaf-45a4-82d3-4c0d1722a786.aspx</link>
      <pubDate>Fri, 30 Sep 2005 16:44:56 GMT</pubDate>
      <description>&lt;font size=3&gt;Just an interesting observation that I found when looking at some code
using &lt;/font&gt;&lt;a href="http://http://www.aisto.com/roeder/dotnet/"&gt;&lt;font size=3&gt;reflector&lt;/font&gt;&lt;/a&gt;&lt;font size=3&gt;.
If you have a switch statement on a string, and there is a small set of cases, (&amp;lt;~10),
the switch is changed to a series of if/else statements. If your list is more than
10, it creates a hashtable, and inserts all the strings. Then using the expression
value it find the index of the value in the hashtable and uses that as its key. I'm
sure this is done for a performance reason, but I couldn't speculate as to what it
was. By looking at this, it would seem to be that it is best to use enumerations,
rather than hardcoded strings wherever possible.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font face=Arial,Helvetica,sans-serif&gt;&lt;b&gt;Decompiled Switch statement with 5 cases&lt;/b&gt; &lt;pre&gt;&lt;font color=#1000a0&gt;public&lt;/font&gt; &lt;a title=System.String href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=1"&gt;string&lt;/a&gt; &lt;b&gt;SelectILTest5&lt;/b&gt;(&lt;a title=System.String href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=2"&gt;string&lt;/a&gt; input)
{ &lt;a title=System.String href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=3"&gt;string&lt;/a&gt; &lt;b&gt;text2&lt;/b&gt;; &lt;font color=#1000a0&gt;if&lt;/font&gt; ((&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; = &lt;a title="string input; // Parameter"&gt;input&lt;/a&gt;)
!= &lt;font color=#800000&gt;null&lt;/font&gt;) { &lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; = &lt;a title=System.String href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=4"&gt;string&lt;/a&gt;.&lt;a title="string System.String.IsInterned(string);" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=5"&gt;IsInterned&lt;/a&gt;(&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt;); &lt;font color=#1000a0&gt;if&lt;/font&gt; (&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; != &lt;font color=#800000&gt;"a1"&lt;/font&gt;)
{ &lt;font color=#1000a0&gt;if&lt;/font&gt; (&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; == &lt;font color=#800000&gt;"a2"&lt;/font&gt;)
{ &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a2"&lt;/font&gt;; } &lt;font color=#1000a0&gt;if&lt;/font&gt; (&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; == &lt;font color=#800000&gt;"a3"&lt;/font&gt;)
{ &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a3"&lt;/font&gt;; } &lt;font color=#1000a0&gt;if&lt;/font&gt; (&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; == &lt;font color=#800000&gt;"a4"&lt;/font&gt;)
{ &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a4"&lt;/font&gt;; } &lt;font color=#1000a0&gt;if&lt;/font&gt; (&lt;a title="string text2 // Local Variable"&gt;text2&lt;/a&gt; == &lt;font color=#800000&gt;"a5"&lt;/font&gt;)
{ &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a5"&lt;/font&gt;; } } &lt;font color=#1000a0&gt;else&lt;/font&gt; { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a1"&lt;/font&gt;;
} } &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;""&lt;/font&gt;; }&lt;/pre&gt;
&lt;b&gt;Decompiled Switch statement with 15 cases(C#)&lt;/b&gt;
&lt;br&gt;
&lt;pre&gt;&lt;font color=#1000a0&gt;public&lt;/font&gt; &lt;a title=System.String href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=1"&gt;string&lt;/a&gt; &lt;b&gt;SelectILTest15&lt;/b&gt;(&lt;a title=System.String href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=2"&gt;string&lt;/a&gt; input)
{ &lt;font color=#1000a0&gt;switch&lt;/font&gt; (&lt;a title="string input; // Parameter"&gt;input&lt;/a&gt;)
{ &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a1"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a1"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a2"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a2"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a3"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a3"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a4"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a4"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a5"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a5"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a6"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a6"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a7"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a7"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a8"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a8"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a9"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a9"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a10"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a10"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a11"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a11"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a12"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a12"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a13"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a13"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a14"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a14"&lt;/font&gt;;
} &lt;font color=#1000a0&gt;case&lt;/font&gt; &lt;font color=#800000&gt;"a15"&lt;/font&gt;: { &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;"a15"&lt;/font&gt;;
} } &lt;font color=#1000a0&gt;return&lt;/font&gt; &lt;font color=#800000&gt;""&lt;/font&gt;; }&lt;/pre&gt;
&lt;b&gt;Decompiled Switch statement with 15 cases (IL)&lt;/b&gt;
&lt;br&gt;
&lt;pre&gt;&lt;font color=#1000a0&gt;.method&lt;/font&gt; &lt;font color=#1000a0&gt;public&lt;/font&gt; &lt;font color=#1000a0&gt;hidebysig&lt;/font&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=string href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=1"&gt;string&lt;/a&gt; &lt;b&gt;SelectILTest15&lt;/b&gt;(&lt;a title=string href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=2"&gt;string&lt;/a&gt; input)&lt;font color=#1000a0&gt; &lt;/font&gt;&lt;font color=#1000a0&gt;cil&lt;/font&gt;&lt;font color=#1000a0&gt; &lt;/font&gt;&lt;font color=#1000a0&gt;managed&lt;/font&gt; { &lt;font color=#808080&gt;//
Code Size: 524 byte(s)&lt;/font&gt; &lt;font color=#1000a0&gt;.maxstack&lt;/font&gt; 4 &lt;font color=#1000a0&gt;.locals&lt;/font&gt; &lt;font color=#1000a0&gt;init&lt;/font&gt; ( &lt;a title=string href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=3"&gt;string&lt;/a&gt; &lt;b&gt;text1&lt;/b&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=4"&gt;object&lt;/a&gt; &lt;b&gt;obj1&lt;/b&gt;)
L_0000: &lt;a title="volatile (0xfe13): Specifies that an address currently atop the evaluation stack might be volatile, and the results of reading that location cannot be cached or that multiple stores to that location cannot be suppressed."&gt;volatile&lt;/a&gt; L_0002: &lt;a title="ldsfld (0x007e): Pushes the value of a static field onto the evaluation stack."&gt;ldsfld&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=5"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=6"&gt;System.Collections.Hashtable&lt;/a&gt; &lt;a title="&lt;PrivateImplementationDetails&gt;" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=7"&gt;&amp;lt;PrivateImplementationDetails&amp;gt;&lt;/a&gt;::&lt;a title=$$method0x6000015-1 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=8"&gt;$$method0x6000015-1&lt;/a&gt; L_0007: &lt;a title="brtrue (0x003a): Transfers control to a target instruction if value is true, not null, or non-zero."&gt;brtrue&lt;/a&gt; L_0124
L_000c: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;30&lt;/font&gt; L_000e: &lt;a title="ldc.r4 (0x0022): Pushes a supplied value of type float32 onto the evaluation stack as type F (float)."&gt;ldc.r4&lt;/a&gt; &lt;font color=#800000&gt;0.5&lt;/font&gt; L_0013: &lt;a title="newobj (0x0073): Creates a new object or a new instance of a value type, pushing an object reference (type O) onto the evaluation stack."&gt;newobj&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=9"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=10"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=11"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=.ctor href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=12"&gt;.ctor&lt;/a&gt;(&lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=13"&gt;int32&lt;/a&gt;, &lt;a title=float32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=14"&gt;float32&lt;/a&gt;)
L_0018: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_0019: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a1"&lt;/font&gt; L_001e: &lt;a title="ldc.i4.0 (0x0016): Pushes the integer value of 0 onto the evaluation stack as an int32."&gt;ldc.i4.0&lt;/a&gt; L_001f: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=15"&gt;int32&lt;/a&gt; L_0024: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=16"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=17"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=18"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=19"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=20"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=21"&gt;object&lt;/a&gt;)
L_0029: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_002a: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a2"&lt;/font&gt; L_002f: &lt;a title="ldc.i4.1 (0x0017): Pushes the integer value of 1 onto the evaluation stack as an int32."&gt;ldc.i4.1&lt;/a&gt; L_0030: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=22"&gt;int32&lt;/a&gt; L_0035: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=23"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=24"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=25"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=26"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=27"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=28"&gt;object&lt;/a&gt;)
L_003a: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_003b: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a3"&lt;/font&gt; L_0040: &lt;a title="ldc.i4.2 (0x0018): Pushes the integer value of 2 onto the evaluation stack as an int32."&gt;ldc.i4.2&lt;/a&gt; L_0041: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=29"&gt;int32&lt;/a&gt; L_0046: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=30"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=31"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=32"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=33"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=34"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=35"&gt;object&lt;/a&gt;)
L_004b: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_004c: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a4"&lt;/font&gt; L_0051: &lt;a title="ldc.i4.3 (0x0019): Pushes the integer value of 3 onto the evaluation stack as an int32."&gt;ldc.i4.3&lt;/a&gt; L_0052: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=36"&gt;int32&lt;/a&gt; L_0057: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=37"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=38"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=39"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=40"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=41"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=42"&gt;object&lt;/a&gt;)
L_005c: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_005d: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a5"&lt;/font&gt; L_0062: &lt;a title="ldc.i4.4 (0x001a): Pushes the integer value of 4 onto the evaluation stack as an int32."&gt;ldc.i4.4&lt;/a&gt; L_0063: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=43"&gt;int32&lt;/a&gt; L_0068: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=44"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=45"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=46"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=47"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=48"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=49"&gt;object&lt;/a&gt;)
L_006d: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_006e: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a6"&lt;/font&gt; L_0073: &lt;a title="ldc.i4.5 (0x001b): Pushes the integer value of 5 onto the evaluation stack as an int32."&gt;ldc.i4.5&lt;/a&gt; L_0074: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=50"&gt;int32&lt;/a&gt; L_0079: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=51"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=52"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=53"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=54"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=55"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=56"&gt;object&lt;/a&gt;)
L_007e: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_007f: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a7"&lt;/font&gt; L_0084: &lt;a title="ldc.i4.6 (0x001c): Pushes the integer value of 6 onto the evaluation stack as an int32."&gt;ldc.i4.6&lt;/a&gt; L_0085: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=57"&gt;int32&lt;/a&gt; L_008a: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=58"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=59"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=60"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=61"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=62"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=63"&gt;object&lt;/a&gt;)
L_008f: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_0090: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a8"&lt;/font&gt; L_0095: &lt;a title="ldc.i4.7 (0x001d): Pushes the integer value of 7 onto the evaluation stack as an int32."&gt;ldc.i4.7&lt;/a&gt; L_0096: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=64"&gt;int32&lt;/a&gt; L_009b: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=65"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=66"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=67"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=68"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=69"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=70"&gt;object&lt;/a&gt;)
L_00a0: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_00a1: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a9"&lt;/font&gt; L_00a6: &lt;a title="ldc.i4.8 (0x001e): Pushes the integer value of 8 onto the evaluation stack as an int32."&gt;ldc.i4.8&lt;/a&gt; L_00a7: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=71"&gt;int32&lt;/a&gt; L_00ac: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=72"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=73"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=74"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=75"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=76"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=77"&gt;object&lt;/a&gt;)
L_00b1: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_00b2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a10"&lt;/font&gt; L_00b7: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;9&lt;/font&gt; L_00b9: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=78"&gt;int32&lt;/a&gt; L_00be: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=79"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=80"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=81"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=82"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=83"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=84"&gt;object&lt;/a&gt;)
L_00c3: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_00c4: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a11"&lt;/font&gt; L_00c9: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;10&lt;/font&gt; L_00cb: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=85"&gt;int32&lt;/a&gt; L_00d0: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=86"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=87"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=88"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=89"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=90"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=91"&gt;object&lt;/a&gt;)
L_00d5: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_00d6: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a12"&lt;/font&gt; L_00db: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;11&lt;/font&gt; L_00dd: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=92"&gt;int32&lt;/a&gt; L_00e2: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=93"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=94"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=95"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=96"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=97"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=98"&gt;object&lt;/a&gt;)
L_00e7: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_00e8: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a13"&lt;/font&gt; L_00ed: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;12&lt;/font&gt; L_00ef: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=99"&gt;int32&lt;/a&gt; L_00f4: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=100"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=101"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=102"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=103"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=104"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=105"&gt;object&lt;/a&gt;)
L_00f9: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_00fa: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a14"&lt;/font&gt; L_00ff: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;13&lt;/font&gt; L_0101: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=106"&gt;int32&lt;/a&gt; L_0106: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=107"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=108"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=109"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=110"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=111"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=112"&gt;object&lt;/a&gt;)
L_010b: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_010c: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a15"&lt;/font&gt; L_0111: &lt;a title="ldc.i4.s (0x001f): Pushes the supplied int8 value onto the evaluation stack as an int32, short form."&gt;ldc.i4.s&lt;/a&gt; &lt;font color=#800000&gt;14&lt;/font&gt; L_0113: &lt;a title="box (0x008c): Converts a value type to an object reference (type O)."&gt;box&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=113"&gt;int32&lt;/a&gt; L_0118: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=void href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=114"&gt;void&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=115"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=116"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=Add href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=117"&gt;Add&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=118"&gt;object&lt;/a&gt;, &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=119"&gt;object&lt;/a&gt;)
L_011d: &lt;a title="volatile (0xfe13): Specifies that an address currently atop the evaluation stack might be volatile, and the results of reading that location cannot be cached or that multiple stores to that location cannot be suppressed."&gt;volatile&lt;/a&gt; L_011f: &lt;a title="stsfld (0x0080): Replaces the value of a static field with a value from the evaluation stack."&gt;stsfld&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=120"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=121"&gt;System.Collections.Hashtable&lt;/a&gt; &lt;a title="&lt;PrivateImplementationDetails&gt;" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=122"&gt;&amp;lt;PrivateImplementationDetails&amp;gt;&lt;/a&gt;::&lt;a title=$$method0x6000015-1 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=123"&gt;$$method0x6000015-1&lt;/a&gt; L_0124: &lt;a title="ldarg.1 (0x0003): Loads the argument at index 1 onto the evaluation stack."&gt;ldarg.1&lt;/a&gt; L_0125: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_0126: &lt;a title="stloc.1 (0x000b): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 1."&gt;stloc.1&lt;/a&gt; L_0127: &lt;a title="brfalse (0x0039): Transfers control to a target instruction if value is false, a null reference (Nothing in Visual Basic), or zero."&gt;brfalse&lt;/a&gt; L_0202
L_012c: &lt;a title="volatile (0xfe13): Specifies that an address currently atop the evaluation stack might be volatile, and the results of reading that location cannot be cached or that multiple stores to that location cannot be suppressed."&gt;volatile&lt;/a&gt; L_012e: &lt;a title="ldsfld (0x007e): Pushes the value of a static field onto the evaluation stack."&gt;ldsfld&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=124"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=125"&gt;System.Collections.Hashtable&lt;/a&gt; &lt;a title="&lt;PrivateImplementationDetails&gt;" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=126"&gt;&amp;lt;PrivateImplementationDetails&amp;gt;&lt;/a&gt;::&lt;a title=$$method0x6000015-1 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=127"&gt;$$method0x6000015-1&lt;/a&gt; L_0133: &lt;a title="ldloc.1 (0x0007): Loads the local variable at index 1 onto the evaluation stack."&gt;ldloc.1&lt;/a&gt; L_0134: &lt;a title="call (0x0028): Calls the method indicated by the passed method descriptor."&gt;call&lt;/a&gt; &lt;font color=#1000a0&gt;instance&lt;/font&gt; &lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=128"&gt;object&lt;/a&gt; [&lt;a title="mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=129"&gt;mscorlib&lt;/a&gt;]&lt;a title=System.Collections.Hashtable href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=130"&gt;System.Collections.Hashtable&lt;/a&gt;::&lt;a title=get_Item href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=131"&gt;get_Item&lt;/a&gt;(&lt;a title=object href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=132"&gt;object&lt;/a&gt;)
L_0139: &lt;a title="dup (0x0025): Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack."&gt;dup&lt;/a&gt; L_013a: &lt;a title="stloc.1 (0x000b): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 1."&gt;stloc.1&lt;/a&gt; L_013b: &lt;a title="brfalse (0x0039): Transfers control to a target instruction if value is false, a null reference (Nothing in Visual Basic), or zero."&gt;brfalse&lt;/a&gt; L_0202
L_0140: &lt;a title="ldloc.1 (0x0007): Loads the local variable at index 1 onto the evaluation stack."&gt;ldloc.1&lt;/a&gt; L_0141: &lt;a title="unbox (0x0079): Converts the boxed representation of a value type to its unboxed form."&gt;unbox&lt;/a&gt; &lt;a title=int32 href="http://www.aisto.com/roeder/dotnet/Default.aspx?Object=133"&gt;int32&lt;/a&gt; L_0146: &lt;a title="ldind.i4 (0x004a): Loads a value of type int32 as an int32 onto the evaluation stack indirectly."&gt;ldind.i4&lt;/a&gt; L_0147: &lt;a title="switch (0x0045): Implements a jump table."&gt;switch&lt;/a&gt; (L_018a,
L_0192, L_019a, L_01a2, L_01aa, L_01b2, L_01ba, L_01c2, L_01ca, L_01d2, L_01da, L_01e2,
L_01ea, L_01f2, L_01fa) L_0188: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_0202
L_018a: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a1"&lt;/font&gt; L_018f: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_0190: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_0192: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a2"&lt;/font&gt; L_0197: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_0198: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_019a: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a3"&lt;/font&gt; L_019f: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01a0: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01a2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a4"&lt;/font&gt; L_01a7: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01a8: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01aa: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a5"&lt;/font&gt; L_01af: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01b0: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01b2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a6"&lt;/font&gt; L_01b7: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01b8: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01ba: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a7"&lt;/font&gt; L_01bf: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01c0: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01c2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a8"&lt;/font&gt; L_01c7: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01c8: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01ca: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a9"&lt;/font&gt; L_01cf: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01d0: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01d2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a10"&lt;/font&gt; L_01d7: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01d8: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01da: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a11"&lt;/font&gt; L_01df: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01e0: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01e2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a12"&lt;/font&gt; L_01e7: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01e8: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01ea: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a13"&lt;/font&gt; L_01ef: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01f0: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01f2: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a14"&lt;/font&gt; L_01f7: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_01f8: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_01fa: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;"a15"&lt;/font&gt; L_01ff: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_0200: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_0202: &lt;a title="ldstr (0x0072): Pushes a new object reference to a string literal stored in the metadata."&gt;ldstr&lt;/a&gt; &lt;font color=#800000&gt;""&lt;/font&gt; L_0207: &lt;a title="stloc.0 (0x000a): Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0."&gt;stloc.0&lt;/a&gt; L_0208: &lt;a title="br.s (0x002b): Unconditionally transfers control to a target instruction (short form)."&gt;br.s&lt;/a&gt; L_020a
L_020a: &lt;a title="ldloc.0 (0x0006): Loads the local variable at index 0 onto the evaluation stack."&gt;ldloc.0&lt;/a&gt; L_020b: &lt;a title="ret (0x002a): Returns from the current method, pushing a return value (if present) from the caller's evaluation stack onto the callee's evaluation stack."&gt;ret&lt;/a&gt; } &lt;/pre&gt;
&lt;/font&gt;&lt;img width="0" height="0" src="http://blog.philknows.net/aggbug.ashx?id=08bc45a9-4aaf-45a4-82d3-4c0d1722a786" /&gt;</description>
      <comments>http://blog.philknows.net/CommentView,guid,08bc45a9-4aaf-45a4-82d3-4c0d1722a786.aspx</comments>
      <category>Development</category>
      <category>DotNet</category>
    </item>
  </channel>
</rss>