<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brian Grinstead &#187; asp.net</title>
	<atom:link href="http://www.briangrinstead.com/blog/tag/aspnet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.briangrinstead.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 10 Aug 2010 18:26:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C# Tips &#8211; Type Conversion with &#8220;as&#8221; and &#8220;is&#8221;</title>
		<link>http://www.briangrinstead.com/blog/csharp-tips-type-conversion-with-as-and-is</link>
		<comments>http://www.briangrinstead.com/blog/csharp-tips-type-conversion-with-as-and-is#comments</comments>
		<pubDate>Tue, 21 Jul 2009 19:00:39 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.briangrinstead.com/blog/?p=305</guid>
		<description><![CDATA[I had used C# for at least a year before I found out a couple of nice shorthand ways to convert types. These are the is and as expressions, and using them can help make your code more readable. The is Expression The is expression will return true if the provided expression is non-null and [...]]]></description>
			<content:encoded><![CDATA[<p>I had used C# for at least a year before I found out a couple of nice shorthand ways to convert types.  These are the <a href="http://msdn.microsoft.com/en-us/library/scekt9xw%28VS.80%29.aspx">is</a> and <a href="http://msdn.microsoft.com/en-us/library/cscsdfbt%28VS.71%29.aspx">as</a> expressions, and using them can help make your code more readable.</p>

<h3>The is Expression</h3>

<p>The <em>is</em> expression will return true if the provided expression is non-null and can be cast to the specific type.</p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #FF0000;color: #0000FF;">string</span> GetDisplayField<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">object</span> val<span style="color: #000000;color: #000000;">&#41;</span>
<span style="color: #000000;color: #000000;">&#123;</span>
	<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>val <span style="color: #008000;color: #0000FF;">is</span> <span style="color: #FF0000;color: #0000FF;">string</span><span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> text <span style="color: #008000;color: #000000;">=</span> <span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span><span style="color: #000000;color: #000000;">&#41;</span>val<span style="color: #008000;color: #000000;">;</span>
		<span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #666666;color: #808080;">&quot;Value was text: &quot;</span> <span style="color: #008000;color: #000000;">+</span> text<span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
	<span style="color: #0600FF;color: #0000FF;">else</span> <span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>val <span style="color: #008000;color: #0000FF;">is</span> DateTime<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		DateTime time <span style="color: #008000;color: #000000;">=</span> <span style="color: #000000;color: #000000;">&#40;</span>DateTime<span style="color: #000000;color: #000000;">&#41;</span>val<span style="color: #008000;color: #000000;">;</span>
		<span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #666666;color: #808080;">&quot;Value was date: &quot;</span> <span style="color: #008000;color: #000000;">+</span> time.<span style="color: #0000FF;">ToShortDateString</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #666666;color: #808080;">&quot;Could not match type&quot;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #000000;color: #000000;">&#125;</span></pre></div></div>


<h3>The as Expression</h3>

<p>The <em>as</em> expression will try to cast the object into the given type, and returns an object of that type if the cast was successful, or return null if unsuccessful.</p>

<p>This buys a little bit more functionality for you, as it assigns the variable with an already casted value if successful.  It is functionally equivalent to: <code>expression is type ? (type)expression : (type)null</code></p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #FF0000;color: #0000FF;">string</span> GetDisplayField<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">object</span> val<span style="color: #000000;color: #000000;">&#41;</span>
<span style="color: #000000;color: #000000;">&#123;</span>
	<span style="color: #FF0000;color: #0000FF;">string</span> text <span style="color: #008000;color: #000000;">=</span> val <span style="color: #0600FF;color: #0000FF;">as</span> string<span style="color: #008000;color: #000000;">;</span>
	DateTime<span style="color: #008000;color: #000000;">?</span> time <span style="color: #008000;color: #000000;">=</span> val <span style="color: #0600FF;color: #0000FF;">as</span> DateTime<span style="color: #008000;color: #000000;">?;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>text <span style="color: #008000;color: #000000;">!=</span> <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #666666;color: #808080;">&quot;Value was text: &quot;</span> <span style="color: #008000;color: #000000;">+</span> text<span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
	<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>time.<span style="color: #0000FF;">HasValue</span><span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #666666;color: #808080;">&quot;Value was date: &quot;</span> <span style="color: #008000;color: #000000;">+</span> time.<span style="color: #0000FF;">Value</span>.<span style="color: #0000FF;">ToShortDateString</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #666666;color: #808080;">&quot;Could not match type&quot;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #000000;color: #000000;">&#125;</span></pre></div></div>


<h3>Testing out the functions</h3>

<p><br /></p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;color: #000000;">&#40;</span>GetDisplayField<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #808080;">1</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>              <span style="color: #008080; font-style: italic;color: #008000;">// Output: &quot;Could not match type&quot;</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;color: #000000;">&#40;</span>GetDisplayField<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;Hello&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>        <span style="color: #008080; font-style: italic;color: #008000;">// Output: &quot;Value was text: Hello&quot;</span>
Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;color: #000000;">&#40;</span>GetDisplayField<span style="color: #000000;color: #000000;">&#40;</span>DateTime.<span style="color: #0000FF;">Now</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>   <span style="color: #008080; font-style: italic;color: #008000;">// Output: &quot;Value was date: 7/21/2009&quot;</span></pre></div></div>


<p>They are both readable ways to perform a type conversion &#8211; but pick one or the other!  Using both of them is redundant.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.briangrinstead.com/blog/csharp-tips-type-conversion-with-as-and-is/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extending jQuery to Select ASP Controls</title>
		<link>http://www.briangrinstead.com/blog/extending-jquery-to-select-asp-controls</link>
		<comments>http://www.briangrinstead.com/blog/extending-jquery-to-select-asp-controls#comments</comments>
		<pubDate>Mon, 08 Jun 2009 18:54:30 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[All]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.briangrinstead.com/?p=226</guid>
		<description><![CDATA[One thing that has always been annoying about programming JavaScript in an ASP.NET Web Forms environment is that the ID attribute of HTML controls rendered out from ASP controls is unpredictable. &#60;asp:TextBox runat=&#34;server&#34; ID=&#34;txtPhoneNumber&#34; /&#62; renders out as something like: &#60;input type=&#34;text&#34; id=&#34;ctl00_ctl00_ctl00_main_Content_txtPhoneNumber&#34; name=&#34;ctl00$ctl00$ctl00$main$Content$txtPhoneNumber&#34; /&#62; I did a write up over on the LANIT development [...]]]></description>
			<content:encoded><![CDATA[<p>One thing that has always been annoying about programming JavaScript in an ASP.NET Web Forms environment is that the ID attribute of HTML controls rendered out from ASP controls is unpredictable.</p>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">	&lt;asp:TextBox runat=&quot;server&quot; ID=&quot;txtPhoneNumber&quot; /&gt;</pre></div></div>


<p>renders out as something like:</p>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">	&lt;input type=&quot;text&quot; id=&quot;ctl00_ctl00_ctl00_main_Content_txtPhoneNumber&quot; 
		name=&quot;ctl00$ctl00$ctl00$main$Content$txtPhoneNumber&quot; /&gt;</pre></div></div>


<p>I <a href="http://lanitdev.wordpress.com/2009/06/08/extending-jquery-to-select-asp-controls/">did a write up</a> over on the <a href="http://lanitdev.wordpress.com/">LANIT development blog</a> about a solution to this problem using jQuery.</p>

<p>Check out the post for more details, but here is the function:</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">	jQuery.<span style="color: #660066;">expr</span><span style="color: #009900;color: #000000;">&#91;</span><span style="color: #3366CC;color: #808080;">':'</span><span style="color: #009900;color: #000000;">&#93;</span>.<span style="color: #660066;">asp</span> <span style="color: #339933;color: #000000;">=</span> <span style="color: #003366; font-weight: bold;color: #0000FF;">function</span><span style="color: #009900;color: #000000;">&#40;</span>elem<span style="color: #339933;color: #000000;">,</span> i<span style="color: #339933;color: #000000;">,</span> match<span style="color: #009900;color: #000000;">&#41;</span> <span style="color: #009900;color: #000000;">&#123;</span>
		<span style="color: #000066; font-weight: bold;color: #0000FF;">return</span> <span style="color: #009900;color: #000000;">&#40;</span>elem.<span style="color: #660066;">id</span> <span style="color: #339933;color: #000000;">&amp;&amp;</span> elem.<span style="color: #660066;">id</span>.<span style="color: #660066;">match</span><span style="color: #009900;color: #000000;">&#40;</span>match<span style="color: #009900;color: #000000;">&#91;</span><span style="color: #CC0000;color: #808080;">3</span><span style="color: #009900;color: #000000;">&#93;</span> <span style="color: #339933;color: #000000;">+</span> <span style="color: #3366CC;color: #808080;">&quot;$&quot;</span><span style="color: #009900;color: #000000;">&#41;</span><span style="color: #009900;color: #000000;">&#41;</span><span style="color: #339933;color: #000000;">;</span>
	<span style="color: #009900;color: #000000;">&#125;</span><span style="color: #339933;color: #000000;">;</span>
&nbsp;
	$<span style="color: #009900;color: #000000;">&#40;</span><span style="color: #3366CC;color: #808080;">&quot;:asp(txtPhoneNumber)&quot;</span><span style="color: #009900;color: #000000;">&#41;</span>.<span style="color: #660066;">keyup</span><span style="color: #009900;color: #000000;">&#40;</span>...<span style="color: #009900;color: #000000;">&#41;</span><span style="color: #339933;color: #000000;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.briangrinstead.com/blog/extending-jquery-to-select-asp-controls/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Multipart Form Post in C#</title>
		<link>http://www.briangrinstead.com/blog/multipart-form-post-in-c</link>
		<comments>http://www.briangrinstead.com/blog/multipart-form-post-in-c#comments</comments>
		<pubDate>Fri, 08 May 2009 14:58:07 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[All]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://www.briangrinstead.com/?p=119</guid>
		<description><![CDATA[I recently had to access a web API through C Sharp that required a file upload. This is pretty easy if you have an HTML page with a form tag and you want a user to directly upload the file. &#60;form method=&#34;POST&#34; action=&#34;http://localhost/&#34; enctype=&#34;multipart/form-data&#34;&#62; File : &#60;input type=&#34;file&#34; name=&#34;content&#34; size=&#34;38&#34; /&#62;&#60;br /&#62; &#60;input type=&#34;hidden&#34; name=&#34;id&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had to access a web API through C Sharp that required a file upload.  This is pretty easy if you have an HTML page with a form tag and you want a user to directly upload the file.</p>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;form method=&quot;POST&quot; action=&quot;http://localhost/&quot; enctype=&quot;multipart/form-data&quot;&gt;
	File : &lt;input type=&quot;file&quot; name=&quot;content&quot; size=&quot;38&quot; /&gt;&lt;br /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;id&quot; value='fileUpload' /&gt;
 &lt;/form&gt;</pre></div></div>


<p>However, this is not always a reasonable path to take.  Sometimes you may be wanting to access a file that is already in a system and you don&#8217;t want a new upload.  If you are accessing an external API, this is probably always the case.  Unfortunately, building this post using C# is not quite as straightforward.  I first tried using the WebClient UploadFile method, but it didn&#8217;t fit my needs because I wanted to upload form values (id, filename, other API specific parameters) in addition to just a file.</p>

<p>So, I needed to roll my own form post.  Here is the <a href='http://www.ietf.org/rfc/rfc2388.txt'>Multipart Form RFC</a> and the <a href='http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2'>W3C Specification</a> for multipart/form data.  After reading these links and searching some <a href='http://stackoverflow.com/questions/219827/multipart-forms-from-c-client'>forums</a>, here is what I came up with.</p>

<p><ins>Note: If anyone is interested in this code in Visual Basic, reader Mike Ferreira <a href='#comment-1153'>converted the code into VB.Net</a> in a comment below.</ins></p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #0600FF;color: #0000FF;">static</span> <span style="color: #FF0000;color: #0000FF;">class</span> FormUpload
<span style="color: #000000;color: #000000;">&#123;</span>
	<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #0600FF;color: #0000FF;">static</span> <span style="color: #0600FF;color: #0000FF;">readonly</span> Encoding encoding <span style="color: #008000;color: #000000;">=</span> Encoding.<span style="color: #0000FF;">UTF8</span><span style="color: #008000;color: #000000;">;</span>
	<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #0600FF;color: #0000FF;">static</span> HttpWebResponse MultipartFormDataPost<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span> postUrl, <span style="color: #FF0000;color: #0000FF;">string</span> userAgent, Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span> postParameters<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> formDataBoundary <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;-----------------------------28947758029299&quot;</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> contentType <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;multipart/form-data; boundary=&quot;</span> <span style="color: #008000;color: #000000;">+</span> formDataBoundary<span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> formData <span style="color: #008000;color: #000000;">=</span> GetMultipartFormData<span style="color: #000000;color: #000000;">&#40;</span>postParameters, formDataBoundary<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">return</span> PostForm<span style="color: #000000;color: #000000;">&#40;</span>postUrl, userAgent, contentType, formData<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
	<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #0600FF;color: #0000FF;">static</span> HttpWebResponse PostForm<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span> postUrl, <span style="color: #FF0000;color: #0000FF;">string</span> userAgent, <span style="color: #FF0000;color: #0000FF;">string</span> contentType, <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> formData<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		HttpWebRequest request <span style="color: #008000;color: #000000;">=</span> WebRequest.<span style="color: #0000FF;">Create</span><span style="color: #000000;color: #000000;">&#40;</span>postUrl<span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #0600FF;color: #0000FF;">as</span> HttpWebRequest<span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>request <span style="color: #008000;color: #000000;">==</span> <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span>
		<span style="color: #000000;color: #000000;">&#123;</span>
			<span style="color: #0600FF;color: #0000FF;">throw</span> <span style="color: #008000;color: #0000FF;">new</span> NullReferenceException<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;request is not a http request&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #008080; font-style: italic;color: #008000;">// Set up the request properties</span>
		request.<span style="color: #0000FF;">Method</span> <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;POST&quot;</span><span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;color: #000000;">=</span> contentType<span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">UserAgent</span> <span style="color: #008000;color: #000000;">=</span> userAgent<span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">CookieContainer</span> <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> CookieContainer<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		request.<span style="color: #0000FF;">ContentLength</span> <span style="color: #008000;color: #000000;">=</span> formData.<span style="color: #0000FF;">Length</span><span style="color: #008000;color: #000000;">;</span>  <span style="color: #008080; font-style: italic;color: #008000;">// We need to count how many bytes we're sending. </span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">using</span> <span style="color: #000000;color: #000000;">&#40;</span>Stream requestStream <span style="color: #008000;color: #000000;">=</span> request.<span style="color: #0000FF;">GetRequestStream</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span>
		<span style="color: #000000;color: #000000;">&#123;</span>
			<span style="color: #008080; font-style: italic;color: #008000;">// Push it out there</span>
			requestStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>formData, <span style="color: #FF0000;color: #808080;">0</span>, formData.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
			requestStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">return</span> request.<span style="color: #0000FF;">GetResponse</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #0600FF;color: #0000FF;">as</span> HttpWebResponse<span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #0600FF;color: #0000FF;">static</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> GetMultipartFormData<span style="color: #000000;color: #000000;">&#40;</span>Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span> postParameters, <span style="color: #FF0000;color: #0000FF;">string</span> boundary<span style="color: #000000;color: #000000;">&#41;</span>
	<span style="color: #000000;color: #000000;">&#123;</span>
		Stream formDataStream <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">IO</span></span>.<span style="color: #0000FF;">MemoryStream</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">foreach</span> <span style="color: #000000;color: #000000;">&#40;</span>var param <span style="color: #0600FF;color: #0000FF;">in</span> postParameters<span style="color: #000000;color: #000000;">&#41;</span>
		<span style="color: #000000;color: #000000;">&#123;</span>
			<span style="color: #0600FF;color: #0000FF;">if</span> <span style="color: #000000;color: #000000;">&#40;</span>param.<span style="color: #0000FF;">Value</span> <span style="color: #008000;color: #0000FF;">is</span> FileParameter<span style="color: #000000;color: #000000;">&#41;</span>
			<span style="color: #000000;color: #000000;">&#123;</span>
				FileParameter fileToUpload <span style="color: #008000;color: #000000;">=</span> <span style="color: #000000;color: #000000;">&#40;</span>FileParameter<span style="color: #000000;color: #000000;">&#41;</span>param.<span style="color: #0000FF;">Value</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
				<span style="color: #008080; font-style: italic;color: #008000;">// Add just the first part of this param, since we will write the file data directly to the Stream</span>
				<span style="color: #FF0000;color: #0000FF;">string</span> header <span style="color: #008000;color: #000000;">=</span> <span style="color: #FF0000;color: #0000FF;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;--{0}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>Content-Disposition: form-data; name=<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>{1}<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>; filename=<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>{2}<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>;<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>Content-Type: {3}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span><span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>&quot;</span>, 
					boundary, 
					param.<span style="color: #0000FF;">Key</span>, 
					fileToUpload.<span style="color: #0000FF;">FileName</span> <span style="color: #008000;color: #000000;">??</span> param.<span style="color: #0000FF;">Key</span>, 
					fileToUpload.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;color: #000000;">??</span> <span style="color: #666666;color: #808080;">&quot;application/octet-stream&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
				formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;color: #000000;">&#40;</span>header<span style="color: #000000;color: #000000;">&#41;</span>, <span style="color: #FF0000;color: #808080;">0</span>, header.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
				<span style="color: #008080; font-style: italic;color: #008000;">// Write the file data directly to the Stream, rather than serializing it to a string.</span>
				formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>fileToUpload.<span style="color: #0000FF;">File</span>, <span style="color: #FF0000;color: #808080;">0</span>, fileToUpload.<span style="color: #0000FF;">File</span>.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
			<span style="color: #000000;color: #000000;">&#125;</span>
			<span style="color: #0600FF;color: #0000FF;">else</span>
			<span style="color: #000000;color: #000000;">&#123;</span>
				<span style="color: #FF0000;color: #0000FF;">string</span> postData <span style="color: #008000;color: #000000;">=</span> <span style="color: #FF0000;color: #0000FF;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;--{0}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>Content-Disposition: form-data; name=<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span>{1}<span style="color: #008080; font-weight: bold;color: #808080;">\&quot;</span><span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span><span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>{2}<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>&quot;</span>, 
					boundary, 
					param.<span style="color: #0000FF;">Key</span>, 
					param.<span style="color: #0000FF;">Value</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
				formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;color: #000000;">&#40;</span>postData<span style="color: #000000;color: #000000;">&#41;</span>, <span style="color: #FF0000;color: #808080;">0</span>, postData.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
			<span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
		<span style="color: #008080; font-style: italic;color: #008000;">// Add the end of the request</span>
		<span style="color: #FF0000;color: #0000FF;">string</span> footer <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>--&quot;</span> <span style="color: #008000;color: #000000;">+</span> boundary <span style="color: #008000;color: #000000;">+</span> <span style="color: #666666;color: #808080;">&quot;--<span style="color: #008080; font-weight: bold;color: #808080;">\r</span><span style="color: #008080; font-weight: bold;color: #808080;">\n</span>&quot;</span><span style="color: #008000;color: #000000;">;</span>
		formDataStream.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;color: #000000;">&#40;</span>footer<span style="color: #000000;color: #000000;">&#41;</span>, <span style="color: #FF0000;color: #808080;">0</span>, footer.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #008080; font-style: italic;color: #008000;">// Dump the Stream into a byte[]</span>
		formDataStream.<span style="color: #0000FF;">Position</span> <span style="color: #008000;color: #000000;">=</span> <span style="color: #FF0000;color: #808080;">0</span><span style="color: #008000;color: #000000;">;</span>
		<span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> formData <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span>formDataStream.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#93;</span><span style="color: #008000;color: #000000;">;</span>
		formDataStream.<span style="color: #0000FF;">Read</span><span style="color: #000000;color: #000000;">&#40;</span>formData, <span style="color: #FF0000;color: #808080;">0</span>, formData.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
		formDataStream.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
		<span style="color: #0600FF;color: #0000FF;">return</span> formData<span style="color: #008000;color: #000000;">;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">class</span> FileParameter
	<span style="color: #000000;color: #000000;">&#123;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> File <span style="color: #000000;color: #000000;">&#123;</span> get<span style="color: #008000;color: #000000;">;</span> set<span style="color: #008000;color: #000000;">;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">string</span> FileName <span style="color: #000000;color: #000000;">&#123;</span> get<span style="color: #008000;color: #000000;">;</span> set<span style="color: #008000;color: #000000;">;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> <span style="color: #FF0000;color: #0000FF;">string</span> ContentType <span style="color: #000000;color: #000000;">&#123;</span> get<span style="color: #008000;color: #000000;">;</span> set<span style="color: #008000;color: #000000;">;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> FileParameter<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> file<span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #008000;color: #000000;">:</span> <span style="color: #0600FF;color: #0000FF;">this</span><span style="color: #000000;color: #000000;">&#40;</span>file, <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #000000;color: #000000;">&#123;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> FileParameter<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> file, <span style="color: #FF0000;color: #0000FF;">string</span> filename<span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #008000;color: #000000;">:</span> <span style="color: #0600FF;color: #0000FF;">this</span><span style="color: #000000;color: #000000;">&#40;</span>file, filename, <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #000000;color: #000000;">&#123;</span> <span style="color: #000000;color: #000000;">&#125;</span>
		<span style="color: #0600FF;color: #0000FF;">public</span> FileParameter<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> file, <span style="color: #FF0000;color: #0000FF;">string</span> filename, <span style="color: #FF0000;color: #0000FF;">string</span> contenttype<span style="color: #000000;color: #000000;">&#41;</span> 
		<span style="color: #000000;color: #000000;">&#123;</span>
			File <span style="color: #008000;color: #000000;">=</span> file<span style="color: #008000;color: #000000;">;</span>
			FileName <span style="color: #008000;color: #000000;">=</span> filename<span style="color: #008000;color: #000000;">;</span>
			ContentType <span style="color: #008000;color: #000000;">=</span> contenttype<span style="color: #008000;color: #000000;">;</span>
		<span style="color: #000000;color: #000000;">&#125;</span>
	<span style="color: #000000;color: #000000;">&#125;</span>
<span style="color: #000000;color: #000000;">&#125;</span></pre></div></div>


<p>Here is the code to call the MultipartFormDataPost function with multiple parameters, including a file.</p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Read file data</span>
FileStream fs <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> FileStream<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;c:<span style="color: #008080; font-weight: bold;color: #808080;">\\</span>people.doc&quot;</span>, FileMode.<span style="color: #0000FF;">Open</span>, FileAccess.<span style="color: #0000FF;">Read</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span><span style="color: #000000;color: #000000;">&#93;</span> data <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> <span style="color: #FF0000;color: #0000FF;">byte</span><span style="color: #000000;color: #000000;">&#91;</span>fs.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#93;</span><span style="color: #008000;color: #000000;">;</span>
fs.<span style="color: #0000FF;">Read</span><span style="color: #000000;color: #000000;">&#40;</span>data, <span style="color: #FF0000;color: #808080;">0</span>, data.<span style="color: #0000FF;">Length</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
fs.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Generate post objects</span>
Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span> postParameters <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> Dictionary<span style="color: #008000;color: #000000;">&lt;</span><span style="color: #FF0000;color: #0000FF;">string</span>, <span style="color: #FF0000;color: #0000FF;">object</span><span style="color: #008000;color: #000000;">&gt;</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
postParameters.<span style="color: #0000FF;">Add</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;filename&quot;</span>, <span style="color: #666666;color: #808080;">&quot;People.doc&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
postParameters.<span style="color: #0000FF;">Add</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;fileformat&quot;</span>, <span style="color: #666666;color: #808080;">&quot;doc&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
postParameters.<span style="color: #0000FF;">Add</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #666666;color: #808080;">&quot;file&quot;</span>, <span style="color: #008000;color: #0000FF;">new</span> FormUpload.<span style="color: #0000FF;">FileParameter</span><span style="color: #000000;color: #000000;">&#40;</span>data, <span style="color: #666666;color: #808080;">&quot;People.doc&quot;</span>, <span style="color: #666666;color: #808080;">&quot;application/msword&quot;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Create request and receive response</span>
<span style="color: #FF0000;color: #0000FF;">string</span> postURL <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;http://localhost&quot;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #FF0000;color: #0000FF;">string</span> userAgent <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;Someone&quot;</span><span style="color: #008000;color: #000000;">;</span>
HttpWebResponse webResponse <span style="color: #008000;color: #000000;">=</span> FormUpload.<span style="color: #0000FF;">MultipartFormDataPost</span><span style="color: #000000;color: #000000;">&#40;</span>postURL, userAgent, postParameters<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #008080; font-style: italic;color: #008000;">// Process response</span>
StreamReader responseReader <span style="color: #008000;color: #000000;">=</span> <span style="color: #008000;color: #0000FF;">new</span> StreamReader<span style="color: #000000;color: #000000;">&#40;</span>webResponse.<span style="color: #0000FF;">GetResponseStream</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #FF0000;color: #0000FF;">string</span> fullResponse <span style="color: #008000;color: #000000;">=</span> responseReader.<span style="color: #0000FF;">ReadToEnd</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
webResponse.<span style="color: #0000FF;">Close</span><span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
Response.<span style="color: #0000FF;">Write</span><span style="color: #000000;color: #000000;">&#40;</span>fullResponse<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span></pre></div></div>


<p>Hopefully this code can help someone, figuring out exactly where to place the boundary and newlines in between form key-value pairs caused a little bit of grief during development.  This is some functionality that would be really nice inside of the language library, but it seems like in most languages this is something you end up coding yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.briangrinstead.com/blog/multipart-form-post-in-c/feed</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>C# Tips &#8211; Null Coalescing ??</title>
		<link>http://www.briangrinstead.com/blog/null-coalescing</link>
		<comments>http://www.briangrinstead.com/blog/null-coalescing#comments</comments>
		<pubDate>Tue, 05 May 2009 17:29:30 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[All]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.briangrinstead.com/?p=85</guid>
		<description><![CDATA[I have always enjoyed using the logical OR operator in JavaScript (&#124;&#124;) as an oppurtunity to check for a null-like value, specifically to provide default parameters for functions or to check for existence of a property on a collection. I think they are a great way to make code more concise, and if used well, [...]]]></description>
			<content:encoded><![CDATA[<p>I have always enjoyed using the logical OR operator in JavaScript (||) as an oppurtunity to check for a null-like value, specifically to provide default parameters for functions or to check for existence of a property on a collection.  I think they are a great way to make code more concise, and if used well, more readable.</p>

<p>These two functions do the same thing, but the first is shorter and more readable to people who may have to go back and modify it later.</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;color: #0000FF;">function</span> contentDocument<span style="color: #009900;color: #000000;">&#40;</span>frame<span style="color: #009900;color: #000000;">&#41;</span> <span style="color: #009900;color: #000000;">&#123;</span>
    <span style="color: #006600; font-style: italic;color: #008000;">// If the frame.contentDocument either doesn't exist or is a null </span>
    <span style="color: #006600; font-style: italic;color: #008000;">// value, it will skip to the next value down the line </span>
    <span style="color: #000066; font-weight: bold;color: #0000FF;">return</span> frame.<span style="color: #660066;">contentDocument</span> <span style="color: #339933;color: #000000;">||</span> 
        frame.<span style="color: #660066;">contentWindow</span>.<span style="color: #660066;">document</span> <span style="color: #339933;color: #000000;">||</span> 
        frame.<span style="color: #660066;">document</span><span style="color: #339933;color: #000000;">;</span>
<span style="color: #009900;color: #000000;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;color: #0000FF;">function</span> contentDocumentVerbose<span style="color: #009900;color: #000000;">&#40;</span>frame<span style="color: #009900;color: #000000;">&#41;</span> <span style="color: #009900;color: #000000;">&#123;</span>
    <span style="color: #006600; font-style: italic;color: #008000;">// This works, but is possibly too verbose for such a simple task</span>
    <span style="color: #000066; font-weight: bold;color: #0000FF;">if</span> <span style="color: #009900;color: #000000;">&#40;</span>frame.<span style="color: #660066;">contentDocument</span><span style="color: #009900;color: #000000;">&#41;</span> <span style="color: #009900;color: #000000;">&#123;</span>
        <span style="color: #000066; font-weight: bold;color: #0000FF;">return</span> frame.<span style="color: #660066;">contentDocument</span><span style="color: #339933;color: #000000;">;</span>
    <span style="color: #009900;color: #000000;">&#125;</span>
    <span style="color: #000066; font-weight: bold;color: #0000FF;">else</span> <span style="color: #000066; font-weight: bold;color: #0000FF;">if</span> <span style="color: #009900;color: #000000;">&#40;</span>frame.<span style="color: #660066;">contentWindow</span><span style="color: #009900;color: #000000;">&#41;</span> <span style="color: #009900;color: #000000;">&#123;</span>
        <span style="color: #000066; font-weight: bold;color: #0000FF;">return</span> frame.<span style="color: #660066;">contentWindow</span>.<span style="color: #660066;">document</span><span style="color: #339933;color: #000000;">;</span>
    <span style="color: #009900;color: #000000;">&#125;</span>
    <span style="color: #000066; font-weight: bold;color: #0000FF;">else</span> <span style="color: #000066; font-weight: bold;color: #0000FF;">if</span> <span style="color: #009900;color: #000000;">&#40;</span>frame.<span style="color: #660066;">document</span><span style="color: #009900;color: #000000;">&#41;</span> <span style="color: #009900;color: #000000;">&#123;</span>
        <span style="color: #000066; font-weight: bold;color: #0000FF;">return</span> frame.<span style="color: #660066;">document</span><span style="color: #339933;color: #000000;">;</span>
    <span style="color: #009900;color: #000000;">&#125;</span>
<span style="color: #009900;color: #000000;">&#125;</span></pre></div></div>


<p>I was happy to see that C# has a similar feature, the <a href="http://en.wikipedia.org/wiki/%3F%3F_Operator">Null Coalescing Operator</a>.</p>

<p>This is nice for the same reasons, and is more readable than the normal ternary operator when simply checking null.  Of course, if I am not checking for a null value, but a more complex boolean expression, I will usually use the ternary operator or an if-else block it is more than just a variable assignment or return statement.  Anytime I use any extra syntactical feature, it is my hope to make the code more readable.</p>

<p>Anyway, here is an example of the &#8216;??&#8217; (coalescing) operator contrasted with the &#8216;?:&#8217; (ternary) operator.</p>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;color: #0000FF;">string</span> APP_DEFAULT <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;application/octet-stream&quot;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #FF0000;color: #0000FF;">string</span> GetContentType<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span> contentType<span style="color: #000000;color: #000000;">&#41;</span>
<span style="color: #000000;color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;color: #008000;">// Nice and readable.  The '??' operator can be very useful.</span>
    <span style="color: #FF0000;color: #0000FF;">string</span> FUNCTION_DEFAULT <span style="color: #008000;color: #000000;">=</span> null<span style="color: #008000;color: #000000;">;</span>
&nbsp;
    <span style="color: #0600FF;color: #0000FF;">return</span> contentType <span style="color: #008000;color: #000000;">??</span> FUNCTION_DEFAULT <span style="color: #008000;color: #000000;">??</span> APP_DEFAULT<span style="color: #008000;color: #000000;">;</span>
<span style="color: #000000;color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;color: #0000FF;">private</span> <span style="color: #FF0000;color: #0000FF;">string</span> GetContentTypeTernary<span style="color: #000000;color: #000000;">&#40;</span><span style="color: #FF0000;color: #0000FF;">string</span> contentType<span style="color: #000000;color: #000000;">&#41;</span> 
<span style="color: #000000;color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;color: #008000;">// This is NOT readable.  Please do not use nested ternary</span>
    <span style="color: #008080; font-style: italic;color: #008000;">// operators... They take too much energy to figure out.</span>
    <span style="color: #FF0000;color: #0000FF;">string</span> FUNCTION_DEFAULT <span style="color: #008000;color: #000000;">=</span> <span style="color: #666666;color: #808080;">&quot;text/plain&quot;</span><span style="color: #008000;color: #000000;">;</span>
&nbsp;
    <span style="color: #0600FF;color: #0000FF;">return</span> <span style="color: #000000;color: #000000;">&#40;</span>contentType <span style="color: #008000;color: #000000;">!=</span> <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #008000;color: #000000;">?</span> contentType <span style="color: #008000;color: #000000;">:</span>
        <span style="color: #000000;color: #000000;">&#40;</span><span style="color: #000000;color: #000000;">&#40;</span>FUNCTION_DEFAULT <span style="color: #008000;color: #000000;">!=</span> <span style="color: #0600FF;color: #0000FF;">null</span><span style="color: #000000;color: #000000;">&#41;</span> <span style="color: #008000;color: #000000;">?</span> FUNCTION_DEFAULT <span style="color: #008000;color: #000000;">:</span> APP_DEFAULT<span style="color: #000000;color: #000000;">&#41;</span><span style="color: #008000;color: #000000;">;</span>
<span style="color: #000000;color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.briangrinstead.com/blog/null-coalescing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
