<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Dave Transom's C# Vitamins</title>
        <link>http://www.singular.co.nz/blog/</link>
        <description>im in ur web, enriching ur code</description>
        <language>en-NZ</language>
        <copyright>Dave Transom</copyright>
        <managingEditor>blog@singular.co.nz</managingEditor>
        <generator>Subtext Version 1.9.6.0</generator>
        <image>
            <title>Dave Transom's C# Vitamins</title>
            <url>http://www.singular.co.nz/blog/images/RSS2Image.gif</url>
            <link>http://www.singular.co.nz/blog/</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>What's wrong with Request.Headers["Accept-Encoding"].Contains("gzip")?</title>
            <category>C#</category>
            <category>Tips</category>
            <category>.NET</category>
            <category>Source Code</category>
            <link>http://www.singular.co.nz/blog/archive/2008/07/06/finding-preferred-accept-encoding-header-in-csharp.aspx</link>
            <description>&lt;p&gt;This post has been brewing for a little while. It stems from an inconsistency I've 	seen in &lt;a href="http://www.microsoft.com/belux/msdn/nl/community/columns/desmet/compression.mspx"&gt; 		code&lt;/a&gt; &lt;a href="http://www.west-wind.com/weblog/posts/10564.aspx"&gt;posted&lt;/a&gt; &lt;a href="http://www.stardeveloper.com/articles/display.html?article=2007110401&amp;amp;page=1"&gt; 			here&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/rashid/archive/2008/03/28/asp-net-mvc-action-filter-caching-and-compression.aspx"&gt; 				there&lt;/a&gt; over the &lt;a href="http://blog.madskristensen.dk/post/HTTP-compression-in-ASPNET-20.aspx"&gt; 					web&lt;/a&gt;. Quite specifically this happens often 	when trying to detect which Accept-Encoding a browser can accept, so a GZIP or DEFLATE 	filter can be used to compress the content.&lt;/p&gt;
&lt;h3&gt;The Offending Code&lt;/h3&gt;
&lt;p&gt;The code in question goes something like this:&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; encoding &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;&lt;/span&gt; Request&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Headers[&lt;span style="color: rgb(163, 21, 21);"&gt;"Accept-Encoding"&lt;/span&gt;];&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (encoding&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Contains(&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppendHeader(&lt;span style="color: rgb(163, 21, 21);"&gt;"Content-Encoding"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;GZipStream&lt;/span&gt;(Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter, &lt;span style="color: rgb(43, 145, 175);"&gt;CompressionMode&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compress);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (encoding&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Contains(&lt;span style="color: rgb(163, 21, 21);"&gt;"deflate"&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppendHeader(&lt;span style="color: rgb(163, 21, 21);"&gt;"Content-Encoding"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"deflate"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DeflateStream&lt;/span&gt;(Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter, &lt;span style="color: rgb(43, 145, 175);"&gt;CompressionMode&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compress);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; What's wrong with it? It seems to be pretty standard and widely in use.&lt;/p&gt;
&lt;p&gt;Well, consider the following possible values that &lt;em&gt;can&lt;/em&gt; be sent in the Accept-Encoding 	header.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: fuchsia;"&gt;1&lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"gzip,deflate"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: fuchsia;"&gt;2&lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"deflate,gzip"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: fuchsia;"&gt;3&lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"gzip;q=.5,deflate"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: fuchsia;"&gt;4&lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"gzip;q=0,deflate"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: fuchsia;"&gt;5&lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"deflate;q=0.5,gzip;q=0.5,identity"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: fuchsia;"&gt;6&lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"*"&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;and here are some observations when running the above code listing, compared to what is expected by &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html"&gt;section 14 of RFC2616&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip,deflate"&lt;/span&gt;: 			&lt;br /&gt;
    This one passes the example code and the rfc fine. As the browser, we're expecting gzip 			first, otherwise give us deflate. 			&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;"deflate,gzip"&lt;/span&gt;:&lt;br /&gt;
    Unfortunately, as the browser, we want &lt;em&gt;deflate&lt;/em&gt; first, but gzip is okay 			if the server can't give us our &lt;em&gt;first preference&lt;/em&gt;; we're served &lt;em&gt;gzip&lt;/em&gt; 			in this case as the code just looks to see if "gzip" is contained within the Accept-Encoding 			header before it looks to see if "deflate" is there. This isn't such a big deal as 			we're still receiving compressed content, but we should have been served deflate. 			&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip;q=.5,deflate"&lt;/span&gt;: 			&lt;br /&gt;
    This one uses another valid method to tell the server (and your application) that 			the browser would prefer deflate encoding before gzip encoding. When a "q=" is specified 			after the encoding, with a value between 0 and 1, the preference is given that weight 			(or quality). When no "q=" is specified, it defaults to 1. So this rule tells the 			server the browser wants gzip &lt;em&gt;only half&lt;/em&gt; as much as it wants deflate compression. 			Because our code is looking to see if gzip is contained within the header, it serves 			us gzip despite our preference. It's still not critical as we can still accept the 			gzip encoding.&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip;q=0,deflate"&lt;/span&gt;:&lt;br /&gt;
    Here is where we get into trouble. Now our header is telling the server "Do NOT 			give me gzip compressed content, but I'll take content encoded with deflate if you 			can". Again, because the code simply looks to see if gzip is contained within the 			header, regardless of its weight and being disallowed, we're still served gzip.&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;"deflate;q=0.5,gzip;q=0.5,identity"&lt;/span&gt;:&lt;br /&gt;
    This one is more of a trick question; its not as innocent as you might think. For 			accept encodings, "identity" is a special case. It means that it should be served 			&lt;strong&gt;without content encoding&lt;/strong&gt;. Considering that the "q" defaults to 			"1" when not specified, this is the order of our preferred encodings &lt;span style="color: rgb(163, 21, 21);"&gt; 				"identity,deflate;q=0.5,gzip;q=0.5"&lt;/span&gt;. This means that we shouldn't give 			a content-encoding. But once again, because the code simply looks to see if contains 			gzip, we get gzipped content. 			&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;"*"&lt;/span&gt;:&lt;br /&gt;
    The last one has said "We'll accept any encoding you want to serve.", and while 			we could (and perhaps should) be served compressed content, because the code can't 			see gzip or deflate in the header, it serves the normal content. This one isn't 			so critical, but it could have been easily solved and help in reducing bandwidth 			and download time.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In all fairness, its probably not likely now days to not accept gzip encoding so 	it probably effects very few requests - but it is incorrect. In my examples I've used 	an arbitrary ordering to illustrate the importance of the "q" part in regards to preference. 	Quite usually however, the most preferred values appear first in the list - but it's not guaranteed 	&lt;/p&gt;
&lt;p&gt;To handle this situation we need to be able to find the preferred encoding (and this 	can be applied to any of the similar headers i.e. Accept-Encoding, Accept-Charset, Accept-Language 	&amp;amp; Accept) that is accepted.&lt;/p&gt;
&lt;h3&gt;Finding a preferred HTTP Header Value in C#&lt;/h3&gt;
&lt;p&gt;I decided to split the header value up into its relevant segments, sort it and then 	interrogate it in a generic list. There 	is possibly more overhead from parsing the value into a list and then looping over the 	values, but verses having an incorrect implementation as the first code listing does, 	its worth it. My implementation of a &lt;code&gt;QValueList&lt;/code&gt; follows shortly. First, if you're interested, I'd encourage you to have a look at the  	built-in Microsoft &lt;span style="color: rgb(163, 21, 21);"&gt;"System.Web.Caching.OutputCacheModule"&lt;/span&gt; module via  	&lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder's .NET Reflector&lt;/a&gt;. It uses 	a parsing method to determine whether an encoding is allowed or not; and truthfully, 	its 	also where I encountered the "identity" encoding and investigated its impact on what we're trying to achieve So an alternative to this approach would be to parse similar 	to the OutputCache module.&lt;/p&gt;
&lt;p&gt;Here's how we'll change the typical code from the start of the post:&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; load encodings from header&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValueList&lt;/span&gt; encodings &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValueList&lt;/span&gt;(Request&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Headers[&lt;span style="color: rgb(163, 21, 21);"&gt;"Accept-Encoding"&lt;/span&gt;]);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; get the types we can handle, can be accepted and &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; in the defined client preference&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; preferred &lt;span style="color: maroon;"&gt;=&lt;/span&gt; encodings&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FindPreferred(&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"deflate"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"identity"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; if none of the preferred values were found, but the &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; client can accept wildcard encodings, we'll default &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; to Gzip.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;(preferred&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsEmpty &lt;span style="color: maroon;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; encodings&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AcceptWildcard &lt;span style="color: maroon;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; encodings&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Find(&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;)&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsEmpty)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  preferred &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// handle the preferred encoding&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;switch&lt;/span&gt;(preferred&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppendHeader(&lt;span style="color: rgb(163, 21, 21);"&gt;"Content-Encoding"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"gzip"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;GZipStream&lt;/span&gt;(Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter, &lt;span style="color: rgb(43, 145, 175);"&gt;CompressionMode&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compress);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"deflate"&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppendHeader(&lt;span style="color: rgb(163, 21, 21);"&gt;"Content-Encoding"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"deflate"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DeflateStream&lt;/span&gt;(Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Filter, &lt;span style="color: rgb(43, 145, 175);"&gt;CompressionMode&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compress);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;case&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"identity"&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;default&lt;/span&gt;:&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The first observation one might make is that there is quite a lot more code. However, 	it is required to get the correct behaviour. Besides, its not a lot if you factor it 	into your code/library/component correctly. &lt;/p&gt;
&lt;p&gt;So why is it called "QValue" and not simply simply "AcceptEncoding"? Well, you can 	apply this to any of the headers that use the same qualified value convention including:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Request&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Headers[&lt;span style="color: rgb(163, 21, 21);"&gt;"Accept-Encoding"&lt;/span&gt;]&lt;/li&gt;
    &lt;li&gt;Request&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Headers[&lt;span style="color: rgb(163, 21, 21);"&gt;"Accept-Charset"&lt;/span&gt;]&lt;/li&gt;
    &lt;li&gt;Request&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Headers[&lt;span style="color: rgb(163, 21, 21);"&gt;"Accept-Language"&lt;/span&gt;]&lt;/li&gt;
    &lt;li&gt;Request&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Headers[&lt;span style="color: rgb(163, 21, 21);"&gt;"Accept"&lt;/span&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Source Code Listing &amp;amp; Download &lt;/h3&gt;
&lt;p&gt;Here's the code listing in line, or you can &lt;a href="http://www.singular.co.nz/blog/downloads/QValue.cs" onclick="urchinTracker('http://www.singular.co.nz/blog/downloads/QValue.cs')"&gt;download 		the .cs file&lt;/a&gt; containing both QValue and QValueList.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Collections&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Generic;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Diagnostics;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Text;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Represents a weighted value (or quality value) from an http header e.g. gzip=0.9; deflate; x-gzip=0.5;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; accept-encoding spec: &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;example&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Accept:          text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Accept-Encoding: gzip,deflate&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Accept-Charset:  ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Accept-Language: en-us,en;q=0.5&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/example&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DebuggerDisplay&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"QValue[{Name}, 	{Weight}]"&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;struct&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;IComparable&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;char&lt;/span&gt;[] delimiters &lt;span style="color: maroon;"&gt;=&lt;/span&gt; { &lt;span style="color: rgb(163, 21, 21);"&gt;';'&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;'='&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; defaultWeight &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;1&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Fields&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; _name;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;float&lt;/span&gt; _weight;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;int&lt;/span&gt; _ordinal;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Constructors&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a new QValue by parsing the given value &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; for name and weight (qvalue)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The value to be parsed e.g. gzip=0.3&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; QValue(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    : &lt;span style="color: blue;"&gt;this&lt;/span&gt;(value, &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  { }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a new QValue by parsing the given value &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; for name and weight (qvalue) and assigns the given &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; ordinal&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The value to be parsed e.g. gzip=0.3&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="ordinal"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The ordinal/index where the item &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; was found in the original list.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; QValue(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value, &lt;span style="color: blue;"&gt;int&lt;/span&gt; ordinal)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _weight &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _ordinal &lt;span style="color: maroon;"&gt;=&lt;/span&gt; ordinal;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    ParseInternal(&lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;, value);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Properties&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; The name of the value part&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Name&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _name; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; The weighting (or qvalue, quality value) of the encoding&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; Weight&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _weight; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether the value can be accepted &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; i.e. it's weight is greater than zero&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; CanAccept&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _weight &lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether the value is empty (i.e. has no name)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsEmpty&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsNullOrEmpty(_name); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Methods&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Parses the given string for name and &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; weigth (qvalue)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The string to parse&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; Parse(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; item &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    ParseInternal(&lt;span style="color: blue;"&gt;ref&lt;/span&gt; item, value);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; item;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Parses the given string for name and &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; weigth (qvalue)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The string to parse&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="ordinal"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The order of item in sequence&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; Parse(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value, &lt;span style="color: blue;"&gt;int&lt;/span&gt; ordinal)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; item &lt;span style="color: maroon;"&gt;=&lt;/span&gt; Parse(value);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    item&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_ordinal &lt;span style="color: maroon;"&gt;=&lt;/span&gt; ordinal;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; item;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Parses the given string for name and &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; weigth (qvalue)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The string to parse&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; ParseInternal(&lt;span style="color: blue;"&gt;ref&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; target, &lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] parts &lt;span style="color: maroon;"&gt;=&lt;/span&gt; value&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Split(delimiters, &lt;span style="color: fuchsia;"&gt;3&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (parts&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Length &lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      target&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; parts[&lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;]&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Trim();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      target&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_weight &lt;span style="color: maroon;"&gt;=&lt;/span&gt; defaultWeight;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (parts&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Length &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;3&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;float&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;TryParse(parts[&lt;span style="color: fuchsia;"&gt;2&lt;/span&gt;], &lt;span style="color: blue;"&gt;out&lt;/span&gt; target&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_weight);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; IComparable&amp;lt;QValue&amp;gt; Members&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Compares this instance to another QValue by&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; comparing first weights, then ordinals.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="other"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The QValue to compare&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; CompareTo(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; other)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;int&lt;/span&gt; value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; _weight&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CompareTo(other&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_weight);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (value &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;int&lt;/span&gt; ord &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;-&lt;/span&gt;_ordinal;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; ord&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CompareTo(&lt;span style="color: maroon;"&gt;-&lt;/span&gt;other&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_ordinal);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; value;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; CompareByWeight&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Compares two QValues in ascending order.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="x"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The first QValue&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="y"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The second QValue&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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; CompareByWeightAsc(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; x, &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; y)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; x&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CompareTo(y);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Compares two QValues in descending order.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="x"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The first QValue&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="y"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The second QValue&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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; CompareByWeightDesc(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; x, &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; y)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: maroon;"&gt;-&lt;/span&gt;x&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CompareTo(y);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Provides a collection for working with qvalue http headers &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; accept-encoding spec: &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DebuggerDisplay&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"QValue[{Count}, 	{AcceptWildcard}]"&lt;/span&gt;)]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;sealed&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValueList&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;List&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;char&lt;/span&gt;[] delimiters &lt;span style="color: maroon;"&gt;=&lt;/span&gt; { &lt;span style="color: rgb(163, 21, 21);"&gt;','&lt;/span&gt; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Fields&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;bool&lt;/span&gt; _acceptWildcard;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;bool&lt;/span&gt; _autoSort;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Constructors&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a new instance of an QValueList list from &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the given string of comma delimited values&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="values"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The raw string of qvalues to load&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; QValueList(&lt;span style="color: blue;"&gt;string&lt;/span&gt; values)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    : &lt;span style="color: blue;"&gt;this&lt;/span&gt;(&lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;span style="color: maroon;"&gt;==&lt;/span&gt; values &lt;span style="color: maroon;"&gt;?&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[&lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;] : values&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Split(delimiters, &lt;span style="color: rgb(43, 145, 175);"&gt;StringSplitOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;RemoveEmptyEntries))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  { }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a new instance of an QValueList from &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the given string array of qvalues&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="values"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The array of qvalue strings &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; i.e. name(;q=[0-9\.]+)?&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Should AcceptWildcard include */* as well? &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; What about other wildcard forms?&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; QValueList(&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] values)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;int&lt;/span&gt; ordinal &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: maroon;"&gt;-&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;1&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt; value &lt;span style="color: blue;"&gt;in&lt;/span&gt; values)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; qvalue &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Parse(value&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Trim(), &lt;span style="color: maroon;"&gt;++&lt;/span&gt;ordinal);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (qvalue&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Equals(&lt;span style="color: rgb(163, 21, 21);"&gt;"*"&lt;/span&gt;)) &lt;span style="color: green;"&gt;// wildcard&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        _acceptWildcard &lt;span style="color: maroon;"&gt;=&lt;/span&gt; qvalue&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CanAccept;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      Add(qvalue);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; this list should be sorted by weight for&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; methods like FindPreferred to work correctly&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    DefaultSort();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _autoSort &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Properties&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether or not the wildcarded encoding is available and allowed&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; AcceptWildcard&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _acceptWildcard; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether, after an add operation, the list should be resorted&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; AutoSort&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _autoSort; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;set&lt;/span&gt; { _autoSort &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Synonym for FindPreferred&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="candidates"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The preferred order in which to return an encoding&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;An QValue based on weight, or null&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] candidates]&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; FindPreferred(candidates); }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Add&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Adds an item to the list, then applies sorting &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; if AutoSort is enabled.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="item"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The item to add&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Add(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; item)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;base&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(item);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    applyAutoSort();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; AddRange&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Adds a range of items to the list, then applies sorting &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; if AutoSort is enabled.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="collection"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The items to add&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; AddRange(&lt;span style="color: rgb(43, 145, 175);"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; collection)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;bool&lt;/span&gt; state &lt;span style="color: maroon;"&gt;=&lt;/span&gt; _autoSort;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _autoSort &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;base&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AddRange(collection);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _autoSort &lt;span style="color: maroon;"&gt;=&lt;/span&gt; state;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    applyAutoSort();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Find&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Finds the first QValue with the given name (case-insensitive)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="name"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The name of the QValue to search for&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; Find(&lt;span style="color: blue;"&gt;string&lt;/span&gt; name)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; criteria &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; item) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; item&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Equals(name, &lt;span style="color: rgb(43, 145, 175);"&gt;StringComparison&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;OrdinalIgnoreCase); };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; Find(criteria);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; FindHighestWeight&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Returns the first match found from the given candidates&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="candidates"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The list of QValue names to find&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The first QValue match to be found&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Loops from the first item in the list to the last and finds &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the first candidate - the list must be sorted for weight prior to &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; calling this method.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; FindHighestWeight(&lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] candidates)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; criteria &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; item)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; isCandidate(item&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name, candidates);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; Find(criteria);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; FindPreferred&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Returns the first match found from the given candidates that is accepted&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="candidates"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The list of names to find&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The first QValue match to be found&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Loops from the first item in the list to the last and finds the &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; first candidate that can be accepted - the list must be sorted for weight &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; prior to calling this method.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; FindPreferred(&lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] candidates)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; criteria &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt; item)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; isCandidate(item&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name, candidates) &lt;span style="color: maroon;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; item&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CanAccept;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; Find(criteria);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; DefaultSort&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Sorts the list comparing by weight in &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; descending order&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; DefaultSort()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    Sort(&lt;span style="color: rgb(43, 145, 175);"&gt;QValue&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CompareByWeightDesc);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; applyAutoSort&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Applies the default sorting method if&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the autosort field is currently enabled&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;void&lt;/span&gt; applyAutoSort()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_autoSort)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      DefaultSort();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; isCandidate&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Determines if the given item contained within the applied array &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; (case-insensitive)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="item"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The string to search for&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="candidates"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The array to search in&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; isCandidate(&lt;span style="color: blue;"&gt;string&lt;/span&gt; item, &lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[] candidates)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt; candidate &lt;span style="color: blue;"&gt;in&lt;/span&gt; candidates)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (candidate&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Equals(item, &lt;span style="color: rgb(43, 145, 175);"&gt;StringComparison&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;OrdinalIgnoreCase))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/16.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2008/07/06/finding-preferred-accept-encoding-header-in-csharp.aspx</guid>
            <pubDate>Sun, 06 Jul 2008 04:55:49 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/16.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2008/07/06/finding-preferred-accept-encoding-header-in-csharp.aspx#feedback</comments>
            <slash:comments>24</slash:comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/16.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/16.aspx</trackback:ping>
        </item>
        <item>
            <title>Drinking from the, erm... garden hose?</title>
            <category>Off Topic</category>
            <category>Community</category>
            <link>http://www.singular.co.nz/blog/archive/2008/02/06/drinking-from-the---erm---garden-hose.aspx</link>
            <description>&lt;p&gt;So, I finally signed up to &lt;a href="http://www.dotnetkicks.com/"&gt;dotnetkicks&lt;/a&gt;, and submitted my first story - it just happened to be my own "&lt;a href="http://www.singular.co.nz/blog/archive/2008/02/03/build-providers-and-strongly-typed-page-urls-in-asp-net.aspx"&gt;Build Providers: Strongly typed page urls in ASP.NET&lt;/a&gt;" post - which is an interesting take on improving productivity by using a build provider to create a strongly typed hierarchy of the files in your Visual Studio project, to avoid mis-typing page locations and improving intellisense.&lt;/p&gt;
&lt;h3&gt;On the same page&lt;/h3&gt;
&lt;p&gt; It turns out that Kirill Chilingarashvili was trying to solve the same issue with &lt;a href="http://blog.devarchive.net/2008/01/auto-generate-strong-typed-navigation.html"&gt;his solution&lt;/a&gt; last month - and while our methods in getting there differ, the end result is surprisingly similar. I only became aware of his method after submitting my post to dotnetkicks - I saw it a few entries down from mine just after I submitted it, and was a little jealous of his title "Auto generate strong typed navigation class for all user controls in ASP.NET web application" - how did I miss those very key words: auto generate and navigation class :)&lt;/p&gt;
&lt;p&gt; It turns out that others thought the idea was &lt;span style="font-style: italic;"&gt;interesting&lt;/span&gt; as well - and I feel the smallest amount of pride at the interested traffic dotnetkicks has sent my way. It's not exactly a deluge, like when you hear about sites getting &lt;a href="http://en.wikipedia.org/wiki/Slashdotted"&gt;slashdotted&lt;/a&gt; into the fiery pits of hell. No, but the near 500 views in a few days has totally outclassed my other posts which have been sitting there for some time, content rich of course, and earning visits from google.&lt;/p&gt;
&lt;p&gt;Lets look at a few of my post stats...&lt;/p&gt;
&lt;table style="border: 1px solid rgb(102, 102, 102); max-width: 600px; border-collapse: collapse; font-family: Tahoma; line-height: 1.6em;"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th style="padding: 2px 4px; vertical-align: top;"&gt; 		Post&lt;/th&gt;
            &lt;th style="padding: 2px 4px;"&gt; 		Published&lt;/th&gt;
            &lt;th style="padding: 2px 4px;"&gt; 		Views&lt;/th&gt;
            &lt;th style="padding: 2px 4px;"&gt; 		Notes&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		&lt;a href="http://www.singular.co.nz/blog/archive/2007/05/14/unobtrusive-javascript-smart-field.aspx"&gt;The Smield: An unobtrusive javascript UI Helping Smart Field&lt;/a&gt;&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		May 2007&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top; text-align: right;"&gt; 			652&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 		Written 9 months ago, lots of content, indexed in google, most popular "all time" 		post... (but not for long?)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		&lt;a href="http://www.singular.co.nz/blog/archive/2007/05/01/building-an-age-class-in-csharp.aspx"&gt;Building an Age Class in C#&lt;/a&gt;&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		May 2007&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top; text-align: right;"&gt; 			552&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 		Posted 9 months ago, not a lot of contention in search engines, gained a lot of 		popularity just before Christmas :)&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		&lt;a href="http://www.singular.co.nz/blog/archive/2008/02/03/build-providers-and-strongly-typed-page-urls-in-asp-net.aspx"&gt;Build Providers: Strongly typed page urls in ASP.NET&lt;/a&gt; 	&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		&lt;strong&gt;Feb 2008&lt;/strong&gt;&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top; text-align: right;"&gt; 		&lt;strong&gt;490&lt;/strong&gt;&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 		Published a few days ago, interesting content, submitted to community site (dotnetkicks).&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		&lt;a href="http://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx"&gt;Programmatically setting the SmtpClient pickup directory location 			at runtime&lt;/a&gt;&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 		Dec 2007&lt;/td&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top; text-align: right;"&gt; 			157&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 		Recent addition, targeted content, good hit rate from search engines - pretty good 		popularity rise considering no outward push to gain popularity.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It's paltry figures by other popular bloggers standards (&lt;a href="http://haacked.com/"&gt;Haacked&lt;/a&gt; has almost 8,000 subscribers, egads!), but you have to start somewhere right?! It's about this time that you realise the power the community has, and how important it is if you want your 'hard work' and sharing to be seen and, erm, shared.&lt;/p&gt;
&lt;p&gt;Originally, I wasn't going to 'push' or 'promote' articles out there. I thought that, if the content was good enough, readers would come to you (queue waynes world, if you build it, they will come, quote). It's still true that if you produce good content, you'll slowly gain readers and popularity. Search engines will slowly help you get there; Seeing that the build provider article posted to dotnetkicks has &lt;em&gt;ousted&lt;/em&gt; my 'slow and steady' approach of my previous entries within the course of  couple of days, slow and steady seems a little &lt;em&gt;too slow&lt;/em&gt; all of a sudden.&lt;/p&gt;
&lt;p&gt;Initially, the thought of submitting a story I had also published seemed absurd, a little too much like 'gaming the system', but upon closer inspection, I saw a few bloggers I read regularly, posting their own content as well - some quite often. &lt;/p&gt;
&lt;h3&gt;Is this wrong? &lt;/h3&gt;
&lt;p&gt;From my perspective I want more people to read what I have to offer as I'm trying to fill a gap where I saw no previous content. The community is a great sounding board, &lt;strong&gt; it gives the ideas you have validation&lt;/strong&gt;; how do you know if it's good, bad, works or not or is well-written if no one reads it? Google's certainly not going to tell me, "nice article Dave". It's a robot! At least not yet... I think there was a badly re-constituted analogy about trees and sound, and falling in the woods in there somewhere... but I'm not sure. I'm not regurgitating other peoples work, like what was &lt;a href="http://weblogs.asp.net/wilczynski/archive/2008/01/28/poor-code.aspx"&gt; going down for a brief period&lt;/a&gt; on the main feed of &lt;a href="http://weblogs.asp.net/"&gt; weblogs.asp.net&lt;/a&gt; after they opened up the blogs, but I wouldn't mind trying to get some of my older posts validated as it may be useful to others - or not. How will we know?&lt;/p&gt;
&lt;p&gt;So, when does submitting your own stories to community sites become obnoxious and frowned upon? Technically, the submission is only the first minor step; the content itself draws the votes or 'kicks' and propels it up the list. &lt;strong&gt;Validation by popularity&lt;/strong&gt; certainly sounds above board. Is there etiquette around such things?&lt;/p&gt;
&lt;h3&gt;It's not a community without you... and you.... and yeah, you too&lt;/h3&gt;
&lt;p&gt;I'm not sure why it took me so long to join dotnetkicks, but I'm glad I'm there now. If you're a .NET developer, I'd &lt;a href="http://www.dotnetkicks.com/register"&gt;encourage you to sign up&lt;/a&gt; as well by shouting you a &lt;a href="http://library.christchurch.org.nz/Reference/FoodDrink/NewZealand/Icons/" title="The chocolate fish entry is half way down!"&gt; prized chocolate fish from my youth&lt;/a&gt;, but you won't need it once you realise what a great resource you've signed up to. And remember to kick things when you like them!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/15.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2008/02/06/drinking-from-the---erm---garden-hose.aspx</guid>
            <pubDate>Wed, 06 Feb 2008 06:09:59 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/15.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2008/02/06/drinking-from-the---erm---garden-hose.aspx#feedback</comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/15.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/15.aspx</trackback:ping>
        </item>
        <item>
            <title>Build Providers: Strongly typed page urls in ASP.NET</title>
            <category>C#</category>
            <category>Utilities</category>
            <category>Tips</category>
            <category>ASP.NET</category>
            <category>Source Code</category>
            <link>http://www.singular.co.nz/blog/archive/2008/02/03/build-providers-and-strongly-typed-page-urls-in-asp-net.aspx</link>
            <description>&lt;p&gt;I'm a fan of strong typing in .NET as you gain compile time validation of code, Visual Studio Intellisense support, not to mention less mucking around with type conversion or dealing with (usually inconsistently) entering strings for page names and configuration setting keys inline. Visual Studio provides intellisense and some degree of validation for pages (i.e. urls) within a project when using Design Mode, but using those urls in code, e.g..&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Redirect( &lt;span style="color: rgb(163, 21, 21);"&gt;"~/MyDir/MyPage.aspx" &lt;/span&gt;);&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; you're out of luck as there isn't any validation unless you write it yourself.&lt;/p&gt;
&lt;p&gt;Perhaps a better syntax is to access urls within your project from a property somewhere, like so:&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Redirect( &lt;span style="color: rgb(43, 145, 175);"&gt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&lt;/span&gt;MyDir_MyPage );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This way, we reference a static variable or constant to retrieve the url we want to redirect the browser to. If the variable is spelt wrong, the project won't compile and we can fix the error. Being a member within the project means we're provided with intellisense support as well. &lt;/p&gt;
&lt;p&gt;However, maintaining variables or constants for your pages can be tedious. If you change the name of a page from "MyPage.aspx" to "MyMovedPage.aspx" the actual value of the variable  "MyDir_MyPage" would also need to be updated. Once again, unless you have some automated tests to validate the page exists, the project will compile, but the if you forgot to update the reference, you'll get the wrong url.&lt;/p&gt;
&lt;h3&gt;Using a Build Provider to deal with changing file names&lt;/h3&gt;
&lt;p&gt;To get around these limitations, and to help lessen the maintenance within your project, we can use a build provider to generate a static class containing all the page's in our project. Once that's done, we get:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Intellisense - no more typing page address strings in code.&lt;/li&gt;
    &lt;li&gt;Compile time support - if a page is renamed, the build provider updates the generated 		class, and changes the &lt;strong&gt;name&lt;/strong&gt; of the variable. Since the variable 		you referenced in your project no longer exists, you'll get compile errors wherever 		the variable is used. It's a simple hop, skip and a jump to go through and correct 		those errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So now we'll be able to use the following code, and know that if we change something, we'll get notified when when we build if something is amis.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;Response&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Redirect( &lt;span style="color: rgb(43, 145, 175);"&gt;Href&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;MyDir&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;MyPage );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The code for the build provider generates the following psudo code:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;create a static root class called "Href"&lt;/li&gt;
    &lt;li&gt;all pages within the root of the project will be exposed as string constants&lt;/li&gt;
    &lt;li&gt;recurse subfolders, adding nested/inner classes and members to represent the hierarchy 		of the project&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We'll look at the code for the build provider a little later, first lets look at what it will generate.&lt;/p&gt;
&lt;h3&gt;It's all Constants and Nested Classes&lt;/h3&gt;
&lt;p&gt;Using the previous example, the code the build provider generates looks something along the lines of...&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&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;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Href&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;//&lt;/span&gt;&lt;span style="color: green;"&gt; ... repeat, one constant for each &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;//&lt;/span&gt;&lt;span style="color: green;"&gt; file in the project root folder&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Default &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"~/"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;//&lt;/span&gt;&lt;span style="color: green;"&gt; ... repeat, one "nested class" for &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;//&lt;/span&gt;&lt;span style="color: green;"&gt; each folder in the project root folder&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MyDir&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;//&lt;/span&gt;&lt;span style="color: green;"&gt; ... repeat, one constant for each &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;//&lt;/span&gt;&lt;span style="color: green;"&gt; file in the folder: /MyDir&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; MyPage &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"~/mydir/mypage.aspx"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Next: Setting up the build provider and configuration options.&lt;/h3&gt;
&lt;p&gt;Build providers &lt;strong&gt;must be compiled&lt;/strong&gt; and referenced in the &lt;strong&gt;/bin&lt;/strong&gt; folder of your project. You can't simply add the code for the build provider to the App_Code folder, as it will give a "Could not load type ''MyBuildProvider" error.&lt;/p&gt;
&lt;p&gt;Once we've added the assembly reference to our project, we can add the relevant configuration information to the web.config.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;compilation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;buildProviders&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;add&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;extension&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;.hrefs&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;CSharpVitamins.Compilation.HrefBuildProvider, 	CSharpVitamins&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;buildProviders&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;compilation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here I've chosen to associate files with the ".hrefs" extension with my HrefBuildProvider. You could easily choose another extension, as it's simply a mapping for a file extension found within the App_Code folder and the build provider. &lt;/p&gt;
&lt;p&gt;Now we can create a file with that extension in the App_Code folder (let's use "Site.hrefs" for now, but you could use any name. You could even have multiple &lt;em&gt;.hrefs&lt;/em&gt; files with different class names, one for aspx pages, another for your images, javascript and css files :), and add the following configuration - then tailor to suit your preferences.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;xml&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;utf-8&lt;/span&gt;"&lt;span style="color: blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;settings&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;namespace&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;""&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;className&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Href&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;maxDepth&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;100&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;lowercaseUrls&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;true&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;includeExtension&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;makePartial&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;files&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;\.(as[pcmh]x|html?)$&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;exclude&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;""&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;folders&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;include&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;""&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;exclude&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;App_|Bin&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;settings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table style="border: 1px solid rgb(102, 102, 102); max-width: 600px; border-collapse: collapse; font-family: Tahoma; line-height: 1.6em;"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th style="padding: 2px 4px; vertical-align: top;"&gt; 			Setting&lt;/th&gt;
            &lt;th style="padding: 2px 4px;"&gt; 			Description&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			namespace&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			The namespace the generated class will be placed within. Leave blank to add to the 			global namespace. &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			className&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			The actual class name that forms the stub of all urls. Defaults to "Href".&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			maxDepth&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			The maximum depth of recursion for processing. Enter a value of 1 for root files 			only, or higher to include subfolders. Defaults to 100.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			lowercaseUrls&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			When true, forces the values of urls to lowercase. Handy of you want to have to 			pages named in PascalCase but want urls all lowercase. Property names follow the 			same casing as the file name. Defaults to false.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			includeExtension&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			When true, the extension is appended to the property name separated by an underscore. 			Defaults to false.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			makePartial&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			When true, the root class uses the partial modifier, enabling you to add additional 			members through a non-auto-generated class file.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			files&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			Contains two regular expression patterns, once each for files to include and exclude. 			Include defaults to "\.aspx$", Exclude defaults to empty (none are explicitly excluded).&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px; vertical-align: top;"&gt; 			folders&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt; 			Same as files, but applied to folders. Include default to empty (all are included), 			Exclude defaults to "App_|Bin".&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Apart from the juicy code, which is coming next, that's it. Now you'll have intellisense for your file locations and compile time checking. It's worth noting that the generated class from the build provider will regenerate when the .hrefs file is modified, or you rebuild. If you want to see the generated class (it's stored in the "Temporary ASP.NET Files" folder), I'd suggest simply to right click on "Href" from &lt;em&gt;your&lt;/em&gt; code, and choose, "Go to definition" - it will bring up the temporary file for you to peruse.&lt;/p&gt;
&lt;h3&gt;Source code for the HrefBuildProvider&lt;/h3&gt;
&lt;p&gt;Rather than walking through the step by step of creating a build provider, I'll just point you to a couple of &lt;a href="http://aspalliance.com/1102_Creating_a_Custom_BuildProvider_in_ASPNET_20.all"&gt; 	other&lt;/a&gt; &lt;a href="http://www.pluralsight.com/blogs/fritz/archive/2004/09/06/2188.aspx"&gt; 		articles&lt;/a&gt; on the &lt;a href="http://notgartner.wordpress.com/2005/04/26/aspnet-20-build-providers/"&gt; 			subject&lt;/a&gt; if you wish to learn more, then I can just display the fully commented source code for the class below :)&lt;/p&gt;
&lt;p&gt;You can download the &lt;a onclick="urchinTracker('http://www.singular.co.nz/blog/downloads/HrefBuildProvider.cs')" href="http://www.singular.co.nz/blog/downloads/HrefBuildProvider.cs"&gt;source code for the HrefBuildProvider&lt;/a&gt; or look at the class definition below.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CodeDom;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Collections&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Generic;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IO;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Text&lt;span style="color: maroon;"&gt;.&lt;/span&gt;RegularExpressions;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Web&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compilation;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Web&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Hosting;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Xml;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compilation&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Generates a static class for urls within an ASP.NET project&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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: rgb(43, 145, 175);"&gt;HrefBuildProvider&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;BuildProvider&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; Fields&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Path to the web root for determining urls within the site&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; _basePath;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether to convert urls to lowercase - based on your preference&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;bool&lt;/span&gt; _useLowerCaseUrls;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether to include the extension of the file in the name &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; of the member&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;bool&lt;/span&gt; _includeExtension;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Whether to create the root class as 'partial', allowing &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; additional members to be added to the resultant class.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;bool&lt;/span&gt; _makePartial;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Maximum recurring depth for the project - 1 for top level, &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; 2 for first level of subfolders etc...&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;int&lt;/span&gt; _maxDepth &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;100&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Namespace the generated class will be placed within.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Leave empty to add to the global namespace e.g. global::Href&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; _namespace;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; The name of the main class e.g. Href&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; _className;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Current depth of recursion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;int&lt;/span&gt; _depth &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Predicate to determine if a file should be included&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; isValidFile;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Predicate to determine if a folder should be included&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; isValidFolder;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; GenerateCode&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Initialises settings from the BuildProvider file, and &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; generates the appropriate code.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="assemblyBuilder"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; GenerateCode(&lt;span style="color: rgb(43, 145, 175);"&gt;AssemblyBuilder&lt;/span&gt; assemblyBuilder)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// init settings from xml source file&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    init();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// create root class e.g. global::Href&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeDeclaration&lt;/span&gt; root &lt;span style="color: maroon;"&gt;=&lt;/span&gt; createStaticClass(_className, _makePartial);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    addSummary(root, &lt;span style="color: rgb(163, 21, 21);"&gt;"Provides access to urls within the project."&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    build(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryInfo&lt;/span&gt;(_basePath), root);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;CodeNamespace&lt;/span&gt; ns &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeNamespace&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    ns&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Types&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(root);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// leave blank for global::namespace&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: maroon;"&gt;!&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsNullOrEmpty(_namespace))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      ns&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; _namespace;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;CodeCompileUnit&lt;/span&gt; unit &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeCompileUnit&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    unit&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Namespaces&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(ns);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    assemblyBuilder&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AddCodeCompileUnit(&lt;span style="color: blue;"&gt;this&lt;/span&gt;, unit);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; build&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Iterates over the given directory, adding the files as members to &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the parent type, then recurse down the folder tree until the max &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; depth is reached.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="dir"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The directory to process&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="parent"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Parent class to add members too.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;void&lt;/span&gt; build(&lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryInfo&lt;/span&gt; dir, &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeDeclaration&lt;/span&gt; parent)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_depth &lt;span style="color: maroon;"&gt;&amp;gt;=&lt;/span&gt; _maxDepth)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: maroon;"&gt;++&lt;/span&gt;_depth;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; 'members' keeps a record of the number of times a &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; member name is repeated within the parent type/class.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Pass this to 'ensureUniqueMemberName' to get the name &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; with an index number appended to the end e.g. the second &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; occurrence of "MyProperty" becomes "MyProperty1"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; members &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; process files:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; iterate over files and add the member&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; public const string MyfileName = "~/myfileName.aspx";&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;FileInfo&lt;/span&gt;[] files &lt;span style="color: maroon;"&gt;=&lt;/span&gt; dir&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetFiles();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;FileInfo&lt;/span&gt; file &lt;span style="color: blue;"&gt;in&lt;/span&gt; files)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (isValidFile(file))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;CodeMemberField&lt;/span&gt; field &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeMemberField&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        field&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; getName(file);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        field&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Type &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeReference&lt;/span&gt;(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        field&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Attributes &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MemberAttributes&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Public &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MemberAttributes&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Const;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        field&lt;span style="color: maroon;"&gt;.&lt;/span&gt;InitExpression &lt;span style="color: maroon;"&gt;=&lt;/span&gt; getInitExpression(getUrl(file));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        addSummary(field, getUrl(file, &lt;span style="color: blue;"&gt;false&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        ensureUniqueMemberName(members, field);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        parent&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Members&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(field);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; process subfolders:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; iterate over folders and add a nested class&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryInfo&lt;/span&gt;[] subfolders &lt;span style="color: maroon;"&gt;=&lt;/span&gt; dir&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetDirectories();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;DirectoryInfo&lt;/span&gt; folder &lt;span style="color: blue;"&gt;in&lt;/span&gt; subfolders)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (isValidFolder(folder))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeDeclaration&lt;/span&gt; nested &lt;span style="color: maroon;"&gt;=&lt;/span&gt; createStaticClass(getName(folder), &lt;span style="color: blue;"&gt;false&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        addSummary(nested, &lt;span style="color: rgb(163, 21, 21);"&gt;"Provides access to urls under: {0}"&lt;/span&gt;, getUrl(folder, &lt;span style="color: blue;"&gt;false&lt;/span&gt;)&lt;span style="color: maroon;"&gt;.&lt;/span&gt;TrimStart(&lt;span style="color: rgb(163, 21, 21);"&gt;'~'&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        ensureUniqueMemberName(members, nested);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        build(folder, nested);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; .ctor will have already been added to members&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; so only add to parent if there are additional &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; members present&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;if&lt;/span&gt; (nested&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Members&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Count &lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;1&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          parent&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Members&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(nested);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: maroon;"&gt;--&lt;/span&gt;_depth;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; init&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Initialises settings from the config file.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;example&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Sample configuration - all nodes and elements are optional, but the file&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; needs a root node to load as an xml document.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;settings &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///    namespace="" &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///    className="Href" &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///    maxDepth="100" &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///    lowercaseUrls="true" &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///    includeExtension="false"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;    &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;    &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;files include="\.(aspx|html)$" exclude="\.htm$" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;    &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;folders include="" exclude="App_|Bin|Templates" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;  &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/settings&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/example&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;void&lt;/span&gt; init()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _basePath &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;HostingEnvironment&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;ApplicationPhysicalPath;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;XmlDocument&lt;/span&gt; xml &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;XmlDocument&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;using&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;Stream&lt;/span&gt; stream &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;VirtualPathProvider&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;OpenFile(&lt;span style="color: blue;"&gt;base&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;VirtualPath))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      xml&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Load(stream);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; code below uses syntax,&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt;       xml["elementName"] ?? xml.CreateElement( "elementName" );&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; as a lazy initialisation technique, rather than checking for &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the node and performing alternate initialisation - this keeps&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; it within the same reading context.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; general settings&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;XmlElement&lt;/span&gt; settings &lt;span style="color: maroon;"&gt;=&lt;/span&gt; xml[&lt;span style="color: rgb(163, 21, 21);"&gt;"settings"&lt;/span&gt;] &lt;span style="color: maroon;"&gt;??&lt;/span&gt; xml&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CreateElement(&lt;span style="color: rgb(163, 21, 21);"&gt;"settings"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _maxDepth &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Parse(getAttributeValue(settings, &lt;span style="color: rgb(163, 21, 21);"&gt;"maxDepth"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"100"&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _useLowerCaseUrls &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Parse(getAttributeValue(settings, &lt;span style="color: rgb(163, 21, 21);"&gt;"lowercaseUrls"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"false"&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _includeExtension &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Parse(getAttributeValue(settings, &lt;span style="color: rgb(163, 21, 21);"&gt;"includeExtension"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"false"&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _makePartial &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Parse(getAttributeValue(settings, &lt;span style="color: rgb(163, 21, 21);"&gt;"makePartial"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"false"&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _namespace &lt;span style="color: maroon;"&gt;=&lt;/span&gt; getAttributeValue(settings, &lt;span style="color: rgb(163, 21, 21);"&gt;"namespace"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    _className &lt;span style="color: maroon;"&gt;=&lt;/span&gt; getAttributeValue(settings, &lt;span style="color: rgb(163, 21, 21);"&gt;"className"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"Href"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; files settings&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;XmlElement&lt;/span&gt; files &lt;span style="color: maroon;"&gt;=&lt;/span&gt; settings[&lt;span style="color: rgb(163, 21, 21);"&gt;"files"&lt;/span&gt;] &lt;span style="color: maroon;"&gt;??&lt;/span&gt; xml&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CreateElement(&lt;span style="color: rgb(163, 21, 21);"&gt;"files"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    isValidFile &lt;span style="color: maroon;"&gt;=&lt;/span&gt; createFilter(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      getAttributeValue(files, &lt;span style="color: rgb(163, 21, 21);"&gt;"include"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;@"\.aspx$"&lt;/span&gt;),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      getAttributeValue(files, &lt;span style="color: rgb(163, 21, 21);"&gt;"exclude"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; folders settings&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;XmlElement&lt;/span&gt; folders &lt;span style="color: maroon;"&gt;=&lt;/span&gt; settings[&lt;span style="color: rgb(163, 21, 21);"&gt;"folders"&lt;/span&gt;] &lt;span style="color: maroon;"&gt;??&lt;/span&gt; xml&lt;span style="color: maroon;"&gt;.&lt;/span&gt;CreateElement(&lt;span style="color: rgb(163, 21, 21);"&gt;"folders"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    isValidFolder &lt;span style="color: maroon;"&gt;=&lt;/span&gt; createFilter(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      getAttributeValue(folders, &lt;span style="color: rgb(163, 21, 21);"&gt;"include"&lt;/span&gt;),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      getAttributeValue(folders, &lt;span style="color: rgb(163, 21, 21);"&gt;"exclude"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"App_|Bin"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; getAttributeValue&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="parent"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="default"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; getAttributeValue(&lt;span style="color: rgb(43, 145, 175);"&gt;XmlElement&lt;/span&gt; parent, &lt;span style="color: blue;"&gt;string&lt;/span&gt; name, &lt;span style="color: blue;"&gt;string&lt;/span&gt; @default)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;XmlAttribute&lt;/span&gt; attribute &lt;span style="color: maroon;"&gt;=&lt;/span&gt; parent&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Attributes[name];&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;span style="color: maroon;"&gt;==&lt;/span&gt; attribute &lt;span style="color: maroon;"&gt;?&lt;/span&gt; @default : attribute&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Value&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Trim();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="parent"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; getAttributeValue(&lt;span style="color: rgb(43, 145, 175);"&gt;XmlElement&lt;/span&gt; parent, &lt;span style="color: blue;"&gt;string&lt;/span&gt; name)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; getAttributeValue(parent, name, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; createFilter&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a Predicate for filtering based on the given regex patterns&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="includePattern"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="excludePattern"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; createFilter(&lt;span style="color: blue;"&gt;string&lt;/span&gt; includePattern, &lt;span style="color: blue;"&gt;string&lt;/span&gt; excludePattern)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Regex&lt;/span&gt; include &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;, exclude &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: maroon;"&gt;!&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsNullOrEmpty(includePattern))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      include &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Regex&lt;/span&gt;(includePattern,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;RegexOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compiled &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;RegexOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IgnoreCase);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: maroon;"&gt;!&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsNullOrEmpty(excludePattern))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      exclude &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Regex&lt;/span&gt;(excludePattern,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;RegexOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compiled &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;RegexOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IgnoreCase);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; createFilter(include, exclude);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a Predicate for filtering based on the given regex&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="include"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="exclude"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Predicate&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; createFilter(&lt;span style="color: rgb(43, 145, 175);"&gt;Regex&lt;/span&gt; include, &lt;span style="color: rgb(43, 145, 175);"&gt;Regex&lt;/span&gt; exclude)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt; include &lt;span style="color: maroon;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt; exclude)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; info) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; include&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsMatch(info&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FullName) &lt;span style="color: maroon;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: maroon;"&gt;!&lt;/span&gt;exclude&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsMatch(info&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FullName); };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt; include)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; info) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; include&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsMatch(info&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FullName); };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;else&lt;/span&gt; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;null&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt; exclude)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; info) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: maroon;"&gt;!&lt;/span&gt;exclude&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsMatch(info&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FullName); };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; info) { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;; };&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; getInitExpression&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Returns the given value surrounded with quotes.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeSnippetExpression&lt;/span&gt; getInitExpression(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeSnippetExpression&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Concat(&lt;span style="color: rgb(163, 21, 21);"&gt;"\""&lt;/span&gt;, value, &lt;span style="color: rgb(163, 21, 21);"&gt;"\""&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; getName&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets the normalised/escaped member name for the given file&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="file"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; getName(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; file)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Path&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetFileNameWithoutExtension(file&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_includeExtension)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      name &lt;span style="color: maroon;"&gt;+=&lt;/span&gt; file&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Extension&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(&lt;span style="color: rgb(163, 21, 21);"&gt;'.'&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;'_'&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Regex&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(name, &lt;span style="color: rgb(163, 21, 21);"&gt;@"[^a-z0-9_]*"&lt;/span&gt;, &lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Empty,&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: rgb(43, 145, 175);"&gt;RegexOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Compiled &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;RegexOptions&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IgnoreCase);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Ensure pascal casing of the name - not really required&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;//name = TextHelper.PascalCase( name );&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Escape names not starting with a letter&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (name&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Length &lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; 0 &lt;span style="color: maroon;"&gt;&amp;amp;&amp;amp; !&lt;/span&gt;&lt;span style="color: blue;"&gt;char&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsLetter(name[&lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;]))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"_"&lt;/span&gt; &lt;span style="color: maroon;"&gt;+&lt;/span&gt; name;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// Escape C# keywords&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;// included in separate library, omitted here for clarity&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: green;"&gt;//name = CodeHelper.CSharp.EscapeWord(name);&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; name;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; getUrl&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets the url of the file, relative to the app root&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="file"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; getUrl(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; file)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; getUrl(file, &lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets the url of the file, relative to the app root&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="file"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="allowNormalisation"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;When true, allows lowercasing of the &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; url and stripping of default.aspx&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; getUrl(&lt;span style="color: rgb(43, 145, 175);"&gt;FileSystemInfo&lt;/span&gt; file, &lt;span style="color: blue;"&gt;bool&lt;/span&gt; allowNormalisation)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; url &lt;span style="color: maroon;"&gt;=&lt;/span&gt; file&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FullName&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Substring(_basePath&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Length);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (allowNormalisation)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (_useLowerCaseUrls)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        url &lt;span style="color: maroon;"&gt;=&lt;/span&gt; url&lt;span style="color: maroon;"&gt;.&lt;/span&gt;ToLower();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (url&lt;span style="color: maroon;"&gt;.&lt;/span&gt;EndsWith(&lt;span style="color: rgb(163, 21, 21);"&gt;"default.aspx"&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;StringComparison&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;OrdinalIgnoreCase))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        url &lt;span style="color: maroon;"&gt;=&lt;/span&gt; url&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Substring(&lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;, url&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Length &lt;span style="color: maroon;"&gt;-&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;12&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Concat(&lt;span style="color: rgb(163, 21, 21);"&gt;"~/"&lt;/span&gt;, url&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(&lt;span style="color: rgb(163, 21, 21);"&gt;"\\"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"/"&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; addSummary&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Adds a summary doc comment to the type's comment collection&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="type"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="format"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="args"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;void&lt;/span&gt; addSummary(&lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeMember&lt;/span&gt; type, &lt;span style="color: blue;"&gt;string&lt;/span&gt; format, &lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt;[] args)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    addSummary(type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Comments, format, args);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Adds a summary doc comment to the collection&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="comments"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="format"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="args"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;void&lt;/span&gt; addSummary(&lt;span style="color: rgb(43, 145, 175);"&gt;CodeCommentStatementCollection&lt;/span&gt; comments, &lt;span style="color: blue;"&gt;string&lt;/span&gt; format, &lt;span style="color: blue;"&gt;params&lt;/span&gt; &lt;span style="color: blue;"&gt;object&lt;/span&gt;[] args)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    comments&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeCommentStatement&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;summary&amp;gt;"&lt;/span&gt;, &lt;span style="color: blue;"&gt;true&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    comments&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeCommentStatement&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Format(format, args), &lt;span style="color: blue;"&gt;true&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    comments&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeCommentStatement&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"&amp;lt;/summary&amp;gt;"&lt;/span&gt;, &lt;span style="color: blue;"&gt;true&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; createStaticClass&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a static class type with the given name &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="partial"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeDeclaration&lt;/span&gt; createStaticClass(&lt;span style="color: blue;"&gt;string&lt;/span&gt; name, &lt;span style="color: blue;"&gt;bool&lt;/span&gt; partial)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeDeclaration&lt;/span&gt; type &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeDeclaration&lt;/span&gt;(name);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;TypeAttributes &lt;span style="color: maroon;"&gt;|=&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Reflection&lt;span style="color: maroon;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;TypeAttributes&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Sealed;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Attributes &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MemberAttributes&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Public &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MemberAttributes&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Static;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsClass &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsPartial &lt;span style="color: maroon;"&gt;=&lt;/span&gt; partial;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;CodeConstructor&lt;/span&gt; ctor &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;CodeConstructor&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    ctor&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Attributes &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;MemberAttributes&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Private;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Members&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Add(ctor);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;return&lt;/span&gt; type;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #region&lt;/span&gt; ensureUniqueMemberName&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Ensures a unique name within the dictionary to get the name &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; with an index number appended to the end e.g. the second &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; occurrence of "MyProperty" becomes "MyProperty1"&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;A caveat of this method is where you may have two members &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; like MyPage.aspx, MyPage.html as well as MyPage1.aspx. A conflict &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; will occur giving duplicate members i.e. in the same order MyPage, &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; MyPage1 and MyPage1 a second time. The likelihood of such conflicts &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; is possible, with one possible solution to recurse using &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; ensureUniqueMemberName with the newly generated name, or enumerate &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the parent type's Members to see whether there will be a conflict.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="members"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Dictionary containing the name of the members &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; in the current namespace as the key + the number of appearances as &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; the value.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="type"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The next member to add to the current namespace.&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; ensureUniqueMemberName(&lt;span style="color: rgb(43, 145, 175);"&gt;Dictionary&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: maroon;"&gt;&amp;gt;&lt;/span&gt; members, &lt;span style="color: rgb(43, 145, 175);"&gt;CodeTypeMember&lt;/span&gt; type)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; key &lt;span style="color: maroon;"&gt;=&lt;/span&gt; type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;int&lt;/span&gt; count;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;if&lt;/span&gt; (members&lt;span style="color: maroon;"&gt;.&lt;/span&gt;TryGetValue(key, &lt;span style="color: blue;"&gt;out&lt;/span&gt; count))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      type&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Name &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Concat(key, &lt;span style="color: maroon;"&gt;++&lt;/span&gt;count);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      members[key] &lt;span style="color: maroon;"&gt;=&lt;/span&gt; count;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      members[key] &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/14.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2008/02/03/build-providers-and-strongly-typed-page-urls-in-asp-net.aspx</guid>
            <pubDate>Sun, 03 Feb 2008 02:51:15 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/14.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2008/02/03/build-providers-and-strongly-typed-page-urls-in-asp-net.aspx#feedback</comments>
            <slash:comments>12</slash:comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/14.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/14.aspx</trackback:ping>
        </item>
        <item>
            <title>ShortGuid - A shorter and url friendly GUID class in C#</title>
            <category>C#</category>
            <category>Tips</category>
            <category>.NET</category>
            <category>Source Code</category>
            <link>http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx</link>
            <description>&lt;p&gt;I like &lt;a href="http://www.madskristensen.dk/"&gt;Mads Kristensen&lt;/a&gt;, he's often coming 	up with useful code snippets which he shares with the community AND he heads up the &lt;a href="http://www.dotnetblogengine.net/"&gt;BlogEngine.NET&lt;/a&gt; project. He's produced 	the GuidEncoder helper class, which takes a standard guid like this:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;c9a646d3-9c61-4cb7-bfcd-ee2522c8f633&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And shortens it to a smaller string like this:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;00amyWGct0y_ze4lIsj2Mw&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Which is a huge help if you happen to be using guids in your URL's. You can read his article, &lt;a href="http://blog.madskristensen.dk/post/A-shorter-and-URL-friendly-GUID.aspx"&gt;A shorter and URL friendly GUID&lt;/a&gt;, 	on his website. &lt;/p&gt;
&lt;p&gt;I've gone one step further than Mads, and created a struct which encapsulates 	the GuidEncoder functionality. I've called mine the "ShortGuid", but you could equally 	call it a "Sguid" if you like how that sounds (and if you pronounce GUID like "squid" 	and not "goo-id"). Mads's code for en/decoding the guid is still in there as static methods, 	which you can see further down - I'm pretty sure it hasn't been changed.&lt;/p&gt;
&lt;p&gt;I'll jump right into the usage, if you're interested in the code, jump to the bottom 	and download the source.&lt;/p&gt;
&lt;h3&gt;Using the ShortGuid&lt;/h3&gt;
&lt;p&gt;The ShortGuid is compatible with normal Guid's and other ShortGuid strings. Let's 	see an example:&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; guid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NewGuid();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid1 &lt;span style="color: maroon;"&gt;=&lt;/span&gt; guid; &lt;span style="color: green;"&gt;// implicitly cast the &lt;strong&gt;guid&lt;/strong&gt; as a shortguid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;WriteLine( sguid1 );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;WriteLine( sguid1&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Guid );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; This produces a new guid, uses that guid to create a ShortGuid, and displays the two equivalent values in the console. Results would be something along the lines of:&lt;/p&gt;
&lt;p&gt;	&lt;code&gt;FEx1sZbSD0ugmgMAF_RGHw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;b1754c14-d296-4b0f-a09a-030017f4461f&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Or you can implicitly cast a string to a ShortGuid as well.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; code &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"Xy0MVKupFES9NpmZ9TiHcw"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid2 &lt;span style="color: maroon;"&gt;=&lt;/span&gt; code; &lt;span style="color: green;"&gt;// implicitly cast the &lt;strong&gt;string&lt;/strong&gt; as a shortguid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;WriteLine( sguid2 );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;WriteLine( sguid2&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Guid );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; Which produces the following:&lt;/p&gt;
&lt;p&gt;  &lt;code&gt;Xy0MVKupFES9NpmZ9TiHcw&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;540c2d5f-a9ab-4414-bd36-9999f5388773&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Flexible with your other data types&lt;/h4&gt;
&lt;p&gt;The ShortGuid is made to be easily used with the different types, so you can simplify 	your code. Take note of the following examples:&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// for a new ShortGuid, just like Guid.NewGuid()&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NewGuid();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// to cast the string "myString" as a ShortGuid, &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; myString &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"Xy0MVKupFES9NpmZ9TiHcw"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// the following 3 lines are equivilent&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;( myString ); &lt;span style="color: green;"&gt;// traditional&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;)myString; &lt;span style="color: green;"&gt;// explicit cast&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; myString; &lt;span style="color: green;"&gt;// implicit cast&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// Likewise, to cast the Guid "myGuid" as a ShortGuid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; myGuid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;( &lt;span style="color: rgb(163, 21, 21);"&gt;"540c2d5f-a9ab-4414-bd36-9999f5388773"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// the following 3 lines are equivilent&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;( myGuid ); &lt;span style="color: green;"&gt;// traditional&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;)myGuid; &lt;span style="color: green;"&gt;// explicit cast&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; myGuid; &lt;span style="color: green;"&gt;// implicit cast&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; 	After you've created your ShortGuid's the 3 members of most interest are the original 	Guid value, the new short string (the short encoded guid string), and the ToString() 	method, which also returns the short encoded guid string.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;sguid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Guid; &lt;span style="color: green;"&gt;// gets the Guid part&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;sguid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Value; &lt;span style="color: green;"&gt;// gets the encoded Guid as a string&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;sguid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;ToString(); &lt;span style="color: green;"&gt;// same as sguid.Value&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt; 	Easy comparison with guid's and strings&lt;/h4&gt;
&lt;p&gt;You can also do equals comparison against the three types, Guid, string and ShortGuid like in the following example:&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; myGuid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;( &lt;span style="color: rgb(163, 21, 21);"&gt;"540c2d5f-a9ab-4414-bd36-9999f5388773"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; sguid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;)&lt;span style="color: rgb(163, 21, 21);"&gt;"Xy0MVKupFES9NpmZ9TiHcw"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;( sguid &lt;span style="color: maroon;"&gt;==&lt;/span&gt; myGuid )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: green;"&gt;// logic if guid and sguid are equal&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;( sguid &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"Xy0MVKupFES9NpmZ9TiHcw"&lt;/span&gt; )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: green;"&gt;// logic if string and sguid are equal&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt; ShortGuid Source Code&lt;/h3&gt;
&lt;p&gt;Following is the full listing in C#, or you can &lt;a href="http://www.singular.co.nz/blog/downloads/ShortGuid.cs" onclick="urchinTracker('http://www.singular.co.nz/blog/downloads/ShortGuid.cs')"&gt;download the source code for the ShortGuid struct&lt;/a&gt;.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; CSharpVitamins&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Represents a globally unique identifier (GUID) with a &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; shorter string value. Sguid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;struct&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Static&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; A read-only instance of the ShortGuid class whose value &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; is guaranteed to be all zeroes. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;readonly&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; Empty &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Empty);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Fields&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; _guid;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;string&lt;/span&gt; _value;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Contructors&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a ShortGuid from a base64 encoded string&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The encoded guid as a &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; base64 string&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; ShortGuid(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      _value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; value;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      _guid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; Decode(value);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a ShortGuid from a Guid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="guid"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The Guid to encode&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; ShortGuid(&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; guid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      _value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; Encode(guid);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      _guid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; guid;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Properties&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets/sets the underlying Guid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; Guid&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _guid; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;value&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt; _guid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          _guid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          _value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; Encode(&lt;span style="color: blue;"&gt;value&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets/sets the underlying base64 encoded string&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Value&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; _value; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;set&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;value&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt; _value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          _value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          _guid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; Decode(&lt;span style="color: blue;"&gt;value&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; ToString&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Returns the base64 encoded guid as a string&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ToString()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; _value;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Equals&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Returns a value indicating whether this instance and a &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; specified Object represent the same type and value.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="obj"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The object to compare&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Equals(&lt;span style="color: blue;"&gt;object&lt;/span&gt; obj)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (obj &lt;span style="color: blue;"&gt;is&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;return&lt;/span&gt; _guid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Equals(((&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;)obj)&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_guid);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (obj &lt;span style="color: blue;"&gt;is&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;return&lt;/span&gt; _guid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Equals((&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;)obj);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; (obj &lt;span style="color: blue;"&gt;is&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;return&lt;/span&gt; _guid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Equals(((&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;)obj)&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_guid);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; GetHashCode&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Returns the HashCode for underlying Guid.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; GetHashCode()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; _guid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetHashCode();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; NewGuid&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Initialises a new instance of the ShortGuid class&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; NewGuid()&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NewGuid());&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Encode&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Creates a new instance of a Guid using the string value, &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; then returns the base64 encoded version of the Guid.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;An actual Guid string (i.e. not a ShortGuid)&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;string&lt;/span&gt; Encode(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; guid &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;(value);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; Encode(guid);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Encodes the given Guid as a base64 string that is 22 &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; characters long.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="guid"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The Guid to encode&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;string&lt;/span&gt; Encode(&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; guid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;string&lt;/span&gt; encoded &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Convert&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;ToBase64String(guid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;ToByteArray());&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      encoded &lt;span style="color: maroon;"&gt;=&lt;/span&gt; encoded&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(&lt;span style="color: rgb(163, 21, 21);"&gt;"/"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"_"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(&lt;span style="color: rgb(163, 21, 21);"&gt;"+"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"-"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; encoded&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Substring(&lt;span style="color: fuchsia;"&gt;0&lt;/span&gt;, &lt;span style="color: fuchsia;"&gt;22&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Decode&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Decodes the given base64 string&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="value"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;The base64 encoded string of a Guid&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;A new Guid&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; Decode(&lt;span style="color: blue;"&gt;string&lt;/span&gt; value)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      value &lt;span style="color: maroon;"&gt;=&lt;/span&gt; value&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(&lt;span style="color: rgb(163, 21, 21);"&gt;"_"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"/"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: maroon;"&gt;.&lt;/span&gt;Replace(&lt;span style="color: rgb(163, 21, 21);"&gt;"-"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"+"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;byte&lt;/span&gt;[] buffer &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Convert&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;FromBase64String(value &lt;span style="color: maroon;"&gt;+&lt;/span&gt; &lt;span style="color: rgb(163, 21, 21);"&gt;"=="&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;(buffer);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #region&lt;/span&gt; Operators&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Determines if both ShortGuids have the same underlying &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Guid value.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="y"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;bool&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; &lt;span style="color: maroon;"&gt;==&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; x, &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; y)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;if&lt;/span&gt; ((&lt;span style="color: blue;"&gt;object&lt;/span&gt;)x &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;) &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;object&lt;/span&gt;)y &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; x&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_guid &lt;span style="color: maroon;"&gt;==&lt;/span&gt; y&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_guid;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Determines if both ShortGuids do not have the &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; same underlying Guid value.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="y"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;bool&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; &lt;span style="color: maroon;"&gt;!=&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; x, &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; y)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: maroon;"&gt;!&lt;/span&gt;(x &lt;span style="color: maroon;"&gt;==&lt;/span&gt; y);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Implicitly converts the ShortGuid to it's string equivilent&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="shortGuid"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;implicit&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; shortGuid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; shortGuid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_value;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Implicitly converts the ShortGuid to it's Guid equivilent&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="shortGuid"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;implicit&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt; shortGuid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; shortGuid&lt;span style="color: maroon;"&gt;.&lt;/span&gt;_guid;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Implicitly converts the string to a ShortGuid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="shortGuid"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;implicit&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; shortGuid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;(shortGuid);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Implicitly converts the Guid to a ShortGuid &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="guid"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;implicit&lt;/span&gt; &lt;span style="color: blue;"&gt;operator&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Guid&lt;/span&gt; guid)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;ShortGuid&lt;/span&gt;(guid);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/13.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx</guid>
            <pubDate>Thu, 20 Dec 2007 04:15:38 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/13.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2007/12/20/shortguid-a-shorter-and-url-friendly-guid-in-c-sharp.aspx#feedback</comments>
            <slash:comments>40</slash:comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/13.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/13.aspx</trackback:ping>
        </item>
        <item>
            <title>Programmatically setting the SmtpClient pickup directory location at runtime</title>
            <category>C#</category>
            <category>Utilities</category>
            <category>Tips</category>
            <category>.NET</category>
            <category>ASP.NET</category>
            <category>Source Code</category>
            <link>http://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx</link>
            <description>&lt;p&gt;In my last post on &lt;a href="http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspx"&gt;using an smtp pickup directory for ASP.NET development&lt;/a&gt;,
I explained some of the reasons to use a pickup folder instead of an SMTP server during
ASP.NET development. One of the caveats of that configuration is that you have to enter
the full path of the folder you want to store the application's mail in. This is fine if you're working
solo, or can agree on a common folder/path use amongst your colleagues but it reduces
the instant portability of your application, since you'll have the full path of the
folder set in the web.config.&lt;/p&gt;
&lt;p&gt;You can always use the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx"&gt;
configSource&lt;/a&gt; property for your &lt;code&gt;web.config/system.net&lt;/code&gt; configuration element,
and specify the 'per machine details' in a separate file which isn't source controlled.
Not a bad idea.&lt;/p&gt;
&lt;p&gt;However, it still doesn't solve the 'portability' issue. ASP.NET 2.0 (Visual Studio
2005) introduced the new Web Project model, where you can simply open a folder from
the file system as a website and start coding. You can copy or move the
folder to another location, or another machine, and open the folder in VS2005, and once
again you're away.&lt;/p&gt;
&lt;p&gt;With that in mind, configuring the SpecifiedPickupDirectory PickupDirectoryLocation
as an absolute path (which is required by the framework) isn't the best solution as
it ties the mail drop folder to a fixed path and you'll have to reconfigure if you
move your project.&lt;/p&gt;
&lt;h3&gt;Changing the mailSettings through the configuration model&lt;/h3&gt;
&lt;p&gt;It's not entirely straight forward to change the location of the pickup folder at
runtime. Initially, I thought of using the frameworks built-in functionality to change
the application's mailSettings. Which looks something like this: &lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;Configuration&lt;/span&gt; config &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebConfigurationManager&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;OpenWebConfiguration( &lt;span style="color: #a31515;"&gt;"~/web.config"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;MailSettingsSectionGroup&lt;/span&gt; mail &lt;span style="color: maroon;"&gt;=&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;MailSettingsSectionGroup&lt;/span&gt;)config&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetSectionGroup( &lt;span style="color: #a31515;"&gt;"system.net/mailSettings"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt;( mail&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Smtp&lt;span style="color: maroon;"&gt;.&lt;/span&gt;DeliveryMethod &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SmtpDeliveryMethod&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SpecifiedPickupDirectory )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;string&lt;/span&gt; path &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Combine( &lt;span style="color: #2b91af;"&gt;HttpRuntime&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppDomainAppPath, &lt;span style="color: #a31515;"&gt;@"..\Mail"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  mail&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Smtp&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SpecifiedPickupDirectory&lt;span style="color: maroon;"&gt;.&lt;/span&gt;PickupDirectoryLocation &lt;span style="color: maroon;"&gt;=&lt;/span&gt; path;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;But on closer inspection of the SmtpClient class using &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;
Reflector&lt;/a&gt;, you'll find that the default smtp settings utilise a static instance
of an internal class called &lt;code&gt;MailSettingsSectionGroupInternal&lt;/code&gt;, and is
initialised from the default web.config settings. So changes to the runtime configuration don't
effect the actual values the SmtpClient uses. That pretty much means the settings can only be
'set' when the configuration is loaded. &lt;/p&gt;
&lt;p&gt;The only way we can get our changes to be applied is to save the configuration (with
a call to &lt;code&gt;config.Save()&lt;/code&gt;), which means writing to the web.config file. This
in turn triggers the application to reload the changes. It's not ideal, since the app
will be restarted and it's bad because it updates the web.config file with the new absolute path to
the pickup folder. It's pretty much back to square one.&lt;/p&gt;
&lt;h3&gt;Reflection to the rescue&lt;/h3&gt;
&lt;p&gt;In .NET, nothing is too far from our reach if you know how to go about it. To programmatically
set the PickupDirectoryLocation at runtime, all we need to do is use reflection to navigate
our way down a path of interal classes and properties, to the single private variable
that needs to change, and then simply set it. &lt;/p&gt;
&lt;p&gt;The hierarchy that we need to change looks like this: &lt;code&gt;System.Net.Mail.SmtpClient.MailConfiguration.Smtp.SpecifiedPickupDirectory.PickupDirectoryLocation&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Since we can access the public member &lt;code&gt;SmtpClient&lt;/code&gt;, we'll start there and get the first internal (and static) property, &lt;code&gt;MailConfiguration&lt;/code&gt;.
This should be called or defined in the &lt;code&gt;Application_Start&lt;/code&gt; method of your
Global.asax.&lt;/p&gt;
&lt;p&gt;First, let's define some variables for working with, as well as the path we want to use
for our drop folder. In this instance, I've set the path to the folder above the current
application root, in a folder called "Mail".&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt; instanceFlags &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Instance &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NonPublic;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;PropertyInfo&lt;/span&gt; prop;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;object&lt;/span&gt; mailConfiguration, smtp, specifiedPickupDirectory;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; path &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Combine( &lt;span style="color: #2b91af;"&gt;HttpRuntime&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppDomainAppPath, &lt;span style="color: #a31515;"&gt;@"..\Mail"&lt;/span&gt; );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Then get the first &lt;b&gt;static&lt;/b&gt; property and object from the SmtpClient&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// get &lt;strong&gt;static internal&lt;/strong&gt; property: MailConfiguration&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;prop &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;( &lt;span style="color: #2b91af;"&gt;SmtpClient&lt;/span&gt; )&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetProperty( &lt;span style="color: #a31515;"&gt;"MailConfiguration"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Static &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NonPublic );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;mailConfiguration &lt;span style="color: maroon;"&gt;=&lt;/span&gt; prop&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetValue( &lt;span style="color: blue;"&gt;null&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Continue down the hierarchy from the object we just assigned to &lt;code&gt;
mailConfiguration&lt;/code&gt;, getting the properties, and then the value, for each
instance.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// get &lt;strong&gt;internal&lt;/strong&gt; property: Smtp&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;prop &lt;span style="color: maroon;"&gt;=&lt;/span&gt; mailConfiguration&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetType()&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetProperty( &lt;span style="color: #a31515;"&gt;"Smtp"&lt;/span&gt;, instanceFlags );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;smtp &lt;span style="color: maroon;"&gt;=&lt;/span&gt; prop&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetValue( mailConfiguration, &lt;span style="color: blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// get &lt;strong&gt;internal&lt;/strong&gt; property: SpecifiedPickupDirectory&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;prop &lt;span style="color: maroon;"&gt;=&lt;/span&gt; smtp&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetType()&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetProperty( &lt;span style="color: #a31515;"&gt;"SpecifiedPickupDirectory"&lt;/span&gt;, instanceFlags );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;specifiedPickupDirectory &lt;span style="color: maroon;"&gt;=&lt;/span&gt; prop&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetValue( smtp, &lt;span style="color: blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Lastly, get the &lt;b&gt;field&lt;/b&gt; we want to set, as the corresponding &lt;strong&gt;property&lt;/strong&gt; doesn't provide a &lt;i&gt;setter&lt;/i&gt;.&lt;/p&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;// get &lt;strong&gt;private field&lt;/strong&gt;: pickupDirectoryLocation, then set it to the supplied path&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: #2b91af;"&gt;FieldInfo&lt;/span&gt; field &lt;span style="color: maroon;"&gt;=&lt;/span&gt; specifiedPickupDirectory&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetType()&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetField( &lt;span style="color: #a31515;"&gt;"pickupDirectoryLocation"&lt;/span&gt;, instanceFlags );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;field&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SetValue( specifiedPickupDirectory, &lt;strong&gt;path&lt;/strong&gt; );&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;And now, whenever an instance of SmtpClient is created, it will be initialised with
the new pickup folder path.&lt;/p&gt;
&lt;h3&gt;A C# helper class, for your convenience.&lt;/h3&gt;
&lt;p&gt;So now you know how to set the property, here is the full listing of the helper class
I use to achieve it.&lt;/p&gt;
&lt;h4&gt;How to use the CSharpVitamins.MailHelper class.&lt;/h4&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; Application_Start(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt; e) &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: green;"&gt;// set drop folder for mail&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  &lt;span style="color: blue;"&gt;if&lt;/span&gt;( &lt;span style="color: #2b91af;"&gt;MailHelper&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IsUsingPickupDirectory )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: #2b91af;"&gt;MailHelper&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SetRelativePickupDirectoryLocation( &lt;span style="color: #a31515;"&gt;@"..\Mail"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;Source code for the CSharpVitamins.MailHelper class.&lt;/h4&gt;
&lt;div style="font-size: 85%; font-family: Courier New; color: black;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Configuration;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Web;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;IO;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Reflection;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Net&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Mail;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Net&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Configuration;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; CSharpVitamins&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;{&lt;/p&gt;
&lt;p style="margin: 0px;"&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;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MailHelper&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt;&lt;span style="color: maroon;"&gt;?&lt;/span&gt; _isUsingPickupDirectory;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Gets a value to indicate if the default SMTP Delivery &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; method is SpecifiedPickupDirectory&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;bool&lt;/span&gt; IsUsingPickupDirectory&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;get&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;if&lt;/span&gt;( &lt;span style="color: maroon;"&gt;!&lt;/span&gt;_isUsingPickupDirectory&lt;span style="color: maroon;"&gt;.&lt;/span&gt;HasValue )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          &lt;span style="color: #2b91af;"&gt;Configuration&lt;/span&gt; config &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebConfigurationManager&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;OpenWebConfiguration( &lt;span style="color: #a31515;"&gt;"~/web.config"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          &lt;span style="color: #2b91af;"&gt;MailSettingsSectionGroup&lt;/span&gt; mail &lt;span style="color: maroon;"&gt;=&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;MailSettingsSectionGroup&lt;/span&gt;)config&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetSectionGroup( &lt;span style="color: #a31515;"&gt;"system.net/mailSettings"&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;          _isUsingPickupDirectory &lt;span style="color: maroon;"&gt;=&lt;/span&gt; mail&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Smtp&lt;span style="color: maroon;"&gt;.&lt;/span&gt;DeliveryMethod &lt;span style="color: maroon;"&gt;==&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SmtpDeliveryMethod&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SpecifiedPickupDirectory;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;return&lt;/span&gt; _isUsingPickupDirectory&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Value;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Sets the default PickupDirectoryLocation for the SmtpClient.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; This method should be called to set the PickupDirectoryLocation &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; for the SmtpClient at runtime (Application_Start)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Reflection is used to set the private variable located in the &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; internal class for the SmtpClient's mail configuration: &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; System.Net.Mail.SmtpClient.MailConfiguration.Smtp.SpecifiedPickupDirectory.PickupDirectoryLocation&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; The folder must exist.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="path"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;void&lt;/span&gt; SetPickupDirectoryLocation( &lt;span style="color: blue;"&gt;string&lt;/span&gt; path )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt; instanceFlags &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Instance &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NonPublic;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: #2b91af;"&gt;PropertyInfo&lt;/span&gt; prop;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: blue;"&gt;object&lt;/span&gt; mailConfiguration, smtp, specifiedPickupDirectory;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: green;"&gt;// get static internal property: MailConfiguration&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      prop &lt;span style="color: maroon;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;( &lt;span style="color: #2b91af;"&gt;SmtpClient&lt;/span&gt; )&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetProperty( &lt;span style="color: #a31515;"&gt;"MailConfiguration"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Static &lt;span style="color: maroon;"&gt;|&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BindingFlags&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;NonPublic );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      mailConfiguration &lt;span style="color: maroon;"&gt;=&lt;/span&gt; prop&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetValue( &lt;span style="color: blue;"&gt;null&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: green;"&gt;// get internal property: Smtp&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      prop &lt;span style="color: maroon;"&gt;=&lt;/span&gt; mailConfiguration&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetType()&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetProperty( &lt;span style="color: #a31515;"&gt;"Smtp"&lt;/span&gt;, instanceFlags );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      smtp &lt;span style="color: maroon;"&gt;=&lt;/span&gt; prop&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetValue( mailConfiguration, &lt;span style="color: blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: green;"&gt;// get internal property: SpecifiedPickupDirectory&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      prop &lt;span style="color: maroon;"&gt;=&lt;/span&gt; smtp&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetType()&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetProperty( &lt;span style="color: #a31515;"&gt;"SpecifiedPickupDirectory"&lt;/span&gt;, instanceFlags );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      specifiedPickupDirectory &lt;span style="color: maroon;"&gt;=&lt;/span&gt; prop&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetValue( smtp, &lt;span style="color: blue;"&gt;null&lt;/span&gt; );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: green;"&gt;// get private field: pickupDirectoryLocation, then set it to the supplied path&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      &lt;span style="color: #2b91af;"&gt;FieldInfo&lt;/span&gt; field &lt;span style="color: maroon;"&gt;=&lt;/span&gt; specifiedPickupDirectory&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetType()&lt;span style="color: maroon;"&gt;.&lt;/span&gt;GetField( &lt;span style="color: #a31515;"&gt;"pickupDirectoryLocation"&lt;/span&gt;, instanceFlags );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      field&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SetValue( specifiedPickupDirectory, path );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Sets the default PickupDirectoryLocation for the SmtpClient &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; to the relative path from the current web root.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="path"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Relative path to the web root&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;void&lt;/span&gt; SetRelativePickupDirectoryLocation( &lt;span style="color: blue;"&gt;string&lt;/span&gt; path )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      SetPickupDirectoryLocation( &lt;span style="color: #2b91af;"&gt;HttpRuntime&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;AppDomainAppPath, path );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt; &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; Sets the default PickupDirectoryLocation for the SmtpClient.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; This is a shortcut for passing in two paths, which are then &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; combined to set the pickup directory.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="path1"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Base path&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    &lt;span style="color: gray;"&gt;///&lt;/span&gt;&lt;span style="color: green;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;param name="path3"&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;Relative path to be combined with &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&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;void&lt;/span&gt; SetPickupDirectoryLocation( &lt;span style="color: blue;"&gt;string&lt;/span&gt; path1, &lt;span style="color: blue;"&gt;string&lt;/span&gt; path3 )&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;      SetPickupDirectoryLocation( &lt;span style="color: #2b91af;"&gt;Path&lt;/span&gt;&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Combine( path1, path3 ) );&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;  }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Click here to &lt;a onclick="urchinTracker('http://www.singular.co.nz/blog/downloads/MailHelper.cs')" href="http://www.singular.co.nz/blog/downloads/MailHelper.cs"&gt;download the source code for the MailHelper class&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;In summary, it appears that we need to jump through a few hoops to achieve something
fairly small in nature. Although encapsulating our code into a helper class improves
the process of applying our desired setting, I couldn't find anything more straight
forward to accomplish the task. &lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/12.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx</guid>
            <pubDate>Wed, 19 Dec 2007 05:23:58 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/12.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx#feedback</comments>
            <slash:comments>13</slash:comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/12.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/12.aspx</trackback:ping>
        </item>
        <item>
            <title>Using an smtp pickup directory for ASP.NET development</title>
            <category>C#</category>
            <category>Tips</category>
            <category>.NET</category>
            <category>ASP.NET</category>
            <link>http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspx</link>
            <description>&lt;p&gt;I don't know why this never occurred to me before, but using &lt;code&gt;SpecifiedPickupDirectory&lt;/code&gt; as the SmtpDeliveryMethod for sending email while developing ASP.NET websites is a very good idea.&lt;/p&gt;
&lt;p&gt;I was recently 'forced' to start using a mail pickup directory for development when I upgraded to Vista (yes I said upgraded) and found out that &lt;a href="http://weblogs.asp.net/steveschofield/archive/2006/12/19/iis7-post-23-vista-and-smtp-server-where-is-it.aspx"&gt;IIS7 doesn't ship with an SMTP Server&lt;/a&gt;. Many blog posts out &lt;span style="font-style: italic;"&gt;there&lt;/span&gt; recommend using third party software like &lt;a href="http://www.smartertools.com/Products/SmarterMail/Free.aspx"&gt;SmarterMail&lt;/a&gt;, &lt;a href="http://softstack.com/freesmtp.html"&gt;Free SMTP Server&lt;/a&gt; or other cheap shareware products, but if it's for your development machine I say: &lt;span style="font-weight: bold;"&gt;don't do it!&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Why not simply configure your mail settings to use a pickup directory? &lt;br /&gt;
&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;All email is written as an .eml file to the folder you specify.&lt;/li&gt;
    &lt;li&gt;Peace of mind that your system in development isn't going to send your client an unintended email.&lt;/li&gt;
    &lt;li&gt;No more waiting for your test emails to be delivered . Network problems and latency disappear.&lt;/li&gt;
    &lt;li&gt;You can monitor every email your application is sending via a folder. Okay, you have log files for this in SMTP, but peeking into a folder is pretty convenient &lt;span style="font-style: italic;"&gt;during development&lt;/span&gt;.     &lt;/li&gt;
    &lt;li&gt;Your inbox won't get cluttered with numerous development emails, they just sit in the pickup folder ready for you to view and/or delete.&lt;/li&gt;
    &lt;li&gt;No more fake or catch-all email addresses to maintain. Because each email is dumped to the folder, you just open it from  the file system.&lt;/li&gt;
    &lt;li&gt;Store your mail in a separate folder for each website for easier use.&lt;/li&gt;
    &lt;li&gt;Order the files in your pickup directory by "Date Modified" to see the latest messages that have arrived as you'll most probably want to check the last few messages as you develop.     &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And of course we have some &lt;span style="font-style: italic;"&gt;cons&lt;/span&gt; to our &lt;span style="font-style: italic;"&gt;pros&lt;/span&gt;... well, a "con" at least.&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Files use a GUID as their filename - not very helpful as you have to open the message (or wait for the summary to be extracted as a tool tip) to view the subject line, sender and recipient.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, this concept really only applies to your development machine. You may want set up an SMTP server for your staging servers (and obviously your production servers ;), but your dev PC is personal - keep it that way.&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Need further convincing?&lt;/h3&gt;
&lt;h4&gt;Argument #1: Mass Mail&lt;/h4&gt;
&lt;p&gt;Imagine developing a newsletter application, and you need a few thousand addresses to test load (and that funky status widget you built to monitor the send progress). You don't want to have to go and download the few thousand emails to verify them. Look in your pickup folder. Count the number of emails produced. Open a few and inspect the contents. Look for differences in file size; it may give you a clue that something has gone awry.&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Argument #2: Testing with a copy of the production database, or at least, some semi-real data&lt;/h4&gt;
&lt;p&gt;So you've decided to download a copy of the production database so you can test your new features with some real data. You don't want all that new email functionality sending the real recipient your half completed development emails. Look at the pickup directory for the emails of the user your testing against - exactly the way they would see them.&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;Argument #3: Waiting&lt;/h4&gt;
&lt;p&gt;From my experience, sending mail from within our development environment, to an outside network takes a wee bit of time. Usually, production environment is fairly instant for sending mail, and that's great. But in dev mode, you might have to hit your send &amp;amp; receive button a few times. Maybe you receive the email, maybe you don't. You hit send &amp;amp; receive a few more times, come to the conclusion something is b0rked, the mail didn't send or the outside network went down. Execute the step to send the email again, hit send &amp;amp; receive only to get both emails. &lt;span style="font-style: italic;"&gt;sigh. &lt;/span&gt;Again, it's simple, after you've completed the step that sends the email, have a peek at the new file in the pickup folder.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;If you're now convinced, you may pass go, collect $200 and move on to the configuration settings.&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Mail Settings Configuration&lt;/h3&gt;
&lt;p&gt;Configuration is simple, just change the delivery method to SpecifiedPickupDirectory, and add the location to the folder you want to use to store your mail in as per the example below. You do have to enter the full path of the pickup directory, and the directory must exist, but that's really the only caveat.&lt;br /&gt;
&lt;/p&gt;
&lt;div style="font-family: Courier New; color: black;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.net&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;mailSettings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;smtp&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;deliveryMethod&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;SpecifiedPickupDirectory&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;from&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;no-reply@mydomain.com&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;specifiedPickupDirectory&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;pickupDirectoryLocation&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;C:\Development\MyWebApp\Mail&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;smtp&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;mailSettings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;system.net&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;
And that's about all there is to it. Once you let go of your old ways and adopt the pickup directory, it becomes a pretty reliable way to get your development done. I hope this helps.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;[UPDATE]&lt;/span&gt; See my follow on post &lt;a href="http://www.singular.co.nz/blog/archive/2007/12/19/programmatically-setting-the-smtpclient-pickup-directory-location-at-runtime.aspx" title="View Entry"&gt;Programmatically setting the SmtpClient pickup directory location at runtime&lt;/a&gt;, for another helpful development technique.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/11.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspx</guid>
            <pubDate>Tue, 27 Nov 2007 14:34:06 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/11.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2007/11/28/using-an-smtp-pickup-directory-delivery-method-for-asp-net-development.aspx#feedback</comments>
            <slash:comments>17</slash:comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/11.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/11.aspx</trackback:ping>
        </item>
        <item>
            <title>The Smield: An unobtrusive javascript UI Helping Smart Field</title>
            <category>Javascript</category>
            <category>Source Code</category>
            <category>User Interface</category>
            <link>http://www.singular.co.nz/blog/archive/2007/05/14/unobtrusive-javascript-smart-field.aspx</link>
            <description>&lt;p&gt;The 'smield', or &lt;em&gt;sm&lt;/em&gt;art fi&lt;em&gt;eld&lt;/em&gt;, is a useful little user interface widget written in javascript.  		It combines the values of other fields on the page to allow for easier input  		of repeated content. Based on some javascript configuration, the smield  		will insert an unordered list of label and radio button pairs under the target input field (of the smield).&lt;/p&gt;
&lt;p&gt;A few common examples might be:&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;You have a list of customers. Some of those customers might be &lt;span style="font-style: italic;"&gt;known by&lt;/span&gt; a their company name, others might use first and last name combined, and others again might use a nick name.&lt;/li&gt;
    &lt;li&gt;You've just uploaded a file to the web server, and you need an intuitive option to leave the file as the original file name, or select an option and specify a new name.&lt;br /&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The smield allows the user to easily select the value for the new field based on the information  		already entered in the form. Don't want to enter your new username because you want to use your email? Click the "Use Email" option below the username field, or check the option that combines your first and last names with a dot.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;The next image (an animated gif no less!) gives you an idea of how it works (thanks &lt;a href="http://blogs.geekdojo.net/brian/articles/Cropper.aspx"&gt;Cropper&lt;/a&gt;).&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img width="550" height="220" src="/blog/csharpvitamins/smield/preview.gif" alt="Animated gif showing the Smield in action" /&gt;&lt;/p&gt;
&lt;h3&gt;Example and Source Code&lt;/h3&gt;
&lt;p&gt;View the &lt;a href="http://www.singular.co.nz/blog/csharpvitamins/smield/demo.aspx?library=prototype&amp;amp;minified=false"&gt;Smield Demo Page&lt;/a&gt; for all the info (source code, example setup, etc...) and a working example. Or just grab the &lt;a href="http://www.singular.co.nz/blog/csharpvitamins/smield/smield.js" onclick="urchinTracker('/blog/csharpvitamins/smield/smield.js')"&gt;javascript source for the smield&lt;/a&gt; (or &lt;a href="http://www.singular.co.nz/blog/csharpvitamins/smield/smield-min.js" onclick="urchinTracker('/blog/csharpvitamins/smield/smield-min.js')"&gt;minified smield source&lt;/a&gt;).&lt;/p&gt;
&lt;h3&gt;Features&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Unobtrusively extends input fields in HTML forms&lt;/li&gt;
    &lt;li&gt;Combine fields to populate another field&lt;/li&gt;
    &lt;li&gt;Doesn't require any additional frameworks or libraries.&lt;/li&gt;
    &lt;li&gt;Plays nicely with with 3 great frameworks: YUI, Prototype and Microsoft ASP.NET AJAX Extensions (erm, Atlas)&lt;/li&gt;
    &lt;li&gt;Easily apply custom filtering of input; useful for stripping unwanted characters, normalising usernames etc...&lt;/li&gt;
    &lt;li&gt;Minimal setup&lt;/li&gt;
    &lt;li&gt;Supports form resetting&lt;/li&gt;
    &lt;li&gt;Minified javascript source &amp;lt;7Kb&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Saves your users time and helps &lt;em&gt;lead&lt;/em&gt; data entry&lt;/li&gt;
    &lt;li&gt;Makes you happy *&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;* individual results may vary&lt;/p&gt;
&lt;h3&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Configuration isn't difficult, although it could be shorter.&lt;/p&gt;
&lt;p&gt;If you want to use a smield, this is what you need:&lt;/p&gt;
&lt;p&gt;for the smield:&lt;/p&gt;
&lt;div style="font-family: Courier New; color: black;"&gt; &lt;tt style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Smield( &lt;span style="color: green;"&gt;&lt;br /&gt;
   [input field (String or HTMLElement)]&lt;/span&gt;, &lt;br /&gt;
   &lt;span style="color: green;"&gt;[choices (SmieldChoice array)]&lt;/span&gt;, &lt;br /&gt;
   &lt;span style="color: green;"&gt;[options (Object, optional)]&lt;/span&gt; &lt;br /&gt;
   );&lt;/tt&gt; &lt;/div&gt;
&lt;p&gt;and for the choices of a smield:&lt;/p&gt;
&lt;div style="font-family: Courier New; color: black;"&gt; &lt;tt style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SmieldChoice( &lt;span style="color: green;"&gt;&lt;br /&gt;
   [name (String)]&lt;/span&gt;, &lt;br /&gt;
   &lt;span style="color: green;"&gt;[label (String)]&lt;/span&gt;, &lt;br /&gt;
   &lt;span style="color: green;"&gt;[fields (String or HTMLElement array)]&lt;/span&gt;, &lt;br /&gt;
   &lt;span style="color: green;"&gt;[separator (String, optional)]&lt;/span&gt; &lt;br /&gt;
   );&lt;/tt&gt;&lt;/div&gt;
&lt;p&gt;A simple code example for two options, say to &lt;em&gt;specify&lt;/em&gt; a value or use the user's first and last name, would be:&lt;/p&gt;
&lt;div style="font-family: Courier New; color: black;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; myChoices = [&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;new&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SmieldChoice( &lt;span style="color: rgb(163, 21, 21);"&gt;"other"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"Specify"&lt;/span&gt; ), &lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color: blue;"&gt;new&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;SmieldChoice( &lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"Your Name"&lt;/span&gt;, [ &lt;span style="color: rgb(163, 21, 21);"&gt;"txtFirstName"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"txtLastName"&lt;/span&gt; ], &lt;span style="color: rgb(163, 21, 21);"&gt;" "&lt;/span&gt; ) &lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;];&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Smield( &lt;span style="color: rgb(163, 21, 21);"&gt;"txtKnownAs"&lt;/span&gt;, myChoices );&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;There are some options that can be passed in as the smield's third argument. They are as follows:&lt;/p&gt;
&lt;div style="font-family: Courier New; color: black;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;var&lt;/span&gt; myOptions &lt;span style="color: maroon;"&gt;=&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    group: &lt;span style="color: rgb(163, 21, 21);"&gt;"auto-generated if emtpy|name of group"&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    listClass: &lt;span style="color: rgb(163, 21, 21);"&gt;"disabled|unordered list class"&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    disabledClass: &lt;span style="color: rgb(163, 21, 21);"&gt;"input field class when the input field is readonly/disabled"&lt;/span&gt;, &lt;br /&gt;&lt;span style="color: green;"&gt;    // for the filter, specify any function that accepts and returns a string&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    filter: &lt;span style="color: blue;"&gt;function&lt;/span&gt;(value){&lt;span style="color: blue;"&gt;return&lt;/span&gt; value&lt;span style="color: maroon;"&gt;.&lt;/span&gt;replace(&lt;span style="color: maroon;"&gt;/&lt;/span&gt;[&lt;span style="color: maroon;"&gt;^&lt;/span&gt;a&lt;span style="color: maroon;"&gt;-&lt;/span&gt;z]&lt;span style="color: maroon;"&gt;/&lt;/span&gt;g, &lt;span style="color: rgb(163, 21, 21);"&gt;""&lt;/span&gt;);}, &lt;span style="color: green;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    position: &lt;span style="color: rgb(163, 21, 21);"&gt;"below|above"&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    protection: &lt;span style="color: rgb(163, 21, 21);"&gt;"readonly|disabled"&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;};&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;so our example becomes:&lt;/p&gt;
&lt;div style="font-family: Courier New; color: black;"&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color: blue;"&gt;new&lt;/span&gt; CSharpVitamins&lt;span style="color: maroon;"&gt;.&lt;/span&gt;Smield( &lt;span style="color: rgb(163, 21, 21);"&gt;"myTextbox"&lt;/span&gt;, myChoices, myOptions );&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note the "filter" option. In the example above, we provide our own custom function that strips out  	anything that is not a lowercase letter. Mmmm, Handy!&lt;/p&gt;
&lt;p&gt;You might get a better idea of the configuration and how it works by looking at the source of the &lt;a href="http://www.singular.co.nz/blog/csharpvitamins/smield/demo.aspx?library=prototype&amp;amp;minified=false"&gt;smield example page&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;Question and Answer time&lt;/h3&gt;
&lt;h4&gt;That's amazing! What doesn't the smield do?&lt;/h4&gt;
&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; amazing what something so simple can do. Alas, the smield does &lt;em&gt;nothing&lt;/em&gt; beyond  	helping you create a slightly more intuitive user interface. It's quite superficial really.&lt;/p&gt;
&lt;p&gt;The smield does not:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;make use of AJAX. (It's DHTML, whether it's &lt;em&gt;Web Two Point Ohhh&lt;/em&gt; is up to you.)&lt;/li&gt;
    &lt;li&gt;remove your original input field. (It's still a plain 'input of type equals text' field.  		Nothing funky is done to it; the field's value is submitted as any other form element without  		a smield.)&lt;/li&gt;
    &lt;li&gt;improve your sex life (well, it could, but I doubt it)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What do you mean "plays nicely" with other libraries?&lt;/h4&gt;
&lt;p&gt;Good question, I'm glad you asked.&lt;/p&gt;
&lt;p&gt;In the interest of making the smield independent of any particular library, we chose 	to use a fairly standard implementation for adding event handlers to elements in the DOM. Originally, 	the smield was created using &lt;a href="http://www.prototypejs.org/"&gt;Prototype&lt;/a&gt;, but things have moved on and we use a variety of  	frameworks to get the job done these days.&lt;/p&gt;
&lt;p&gt;Initially, given that most of the time we'd be using one library or another, I shied away  	from adding another set of event handling routines to the smield, bloating the code and potentially breaking functionality  	of those libraries. But instead, for the sake of portability, we decided to make the most of both worlds, and go with a default implementation as well - after all it would be silly not to for such a small piece of the overall pie.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;What is meant by "plays nicely" is that, if it can, the smield will use the library method to add,  	remove and purge events, so that all the expected behaviour of those libraries stays in-tact.&lt;/p&gt;
&lt;p&gt;For example, the chosen libraries handle adding and removing events in different ways:&lt;/p&gt;
&lt;table style="border: 1px solid rgb(102, 102, 102); max-width: 600px; border-collapse: collapse; font-family: Tahoma; line-height: 1.6em;"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;th style="padding: 2px 4px;"&gt;Prototype&lt;/th&gt;
            &lt;th style="padding: 2px 4px;"&gt;YUI&lt;/th&gt;
            &lt;th style="padding: 2px 4px;"&gt;Microsoft ASP.NET AJAX&lt;/th&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td style="padding: 2px 4px;"&gt;Adds event handlers to a global cache object, which is automatically cleared when the page unloads (helping to prevent memory leaks in IE)&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt;Also keeps track of handlers via a global cache and clears them on page unload.  			Can purge an element of all attached listeners.&lt;/td&gt;
            &lt;td style="padding: 2px 4px;"&gt;Adds event handlers to an element and caches them on the element itself, but dosen't have &lt;em&gt;automatic purging&lt;/em&gt;. 			Can purge an element of the attached handlers.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;So if we added handlers by another means than the library's method, and then tried to get or purge  	an element's events, because the smield didn't use the library, the smield's events would not be included  	and would still be left attached.&lt;/p&gt;
&lt;p&gt;It's a border-line argument, but still a valid one. It introduces ambiguous behaviour if you're  	relying on the framework you use every day, and could be difficult to troubleshoot/debug. Whether anyone  	would be affected by it is another story. So for the sake of &lt;em&gt;a little&lt;/em&gt; more code, we can play nice  	with YUI, Prototype and MS AJAX.&lt;/p&gt;
&lt;p&gt;It's worth noting that the chosen library should be including before the smield. If the smield can't  	detect one of the libraries when it's loaded, it'll use it's own implementation.&lt;/p&gt;
&lt;p&gt;But where do you draw the line? If we support "playing nicely" for every library out there, we  	might have a file that is a lot bigger than the functionality warrants.&lt;/p&gt;
&lt;p&gt;We could take the &lt;a href="http://extjs.com/"&gt;Ext&lt;/a&gt; approach, and introduce an 'adapter'   or 'bridge'	for the library that overrides the smields default implementation, but then that gives us two files to  	include - and isn't really worth the hassle for a small widget.&lt;/p&gt;
&lt;p&gt;Thinking forward, a better way might be to simply provide a default method, so the smield  	can work in a stand-alone fashion. Then allow the smield's methods to be overridden as desired 	from your project. &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Maybe we'll do this in a future version.&lt;/p&gt;
&lt;h3&gt;Summing up&lt;/h3&gt;
&lt;p&gt;So there you have it. The Smield, a helpful little UI tool to improve on the monotony of web forms. It's unobtrusive, simple to implement, has a small footprint and plays nicely with the 'big kid' libraries out there.  	If you have comments or questions, please leave your message below; or use the contact form.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.singular.co.nz/blog/aggbug/10.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Transom</dc:creator>
            <guid>http://www.singular.co.nz/blog/archive/2007/05/14/unobtrusive-javascript-smart-field.aspx</guid>
            <pubDate>Mon, 14 May 2007 06:25:35 GMT</pubDate>
            <wfw:comment>http://www.singular.co.nz/blog/comments/10.aspx</wfw:comment>
            <comments>http://www.singular.co.nz/blog/archive/2007/05/14/unobtrusive-javascript-smart-field.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.singular.co.nz/blog/comments/commentRss/10.aspx</wfw:commentRss>
            <trackback:ping>http://www.singular.co.nz/blog/services/trackbacks/10.aspx</trackback:ping>
        </item>
    </channel>
</rss>