<?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>简单生活 -- Kevin Yang的博客 &#187; 类型转换</title>
	<atom:link href="http://www.imkevinyang.com/tags/%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2/feed" rel="self" type="application/rss+xml" />
	<link>http://www.imkevinyang.com</link>
	<description>It&#039;s all about sharing</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:37:14 +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>慎用类型强制转换</title>
		<link>http://www.imkevinyang.com/2009/11/%e6%85%8e%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%bc%ba%e5%88%b6%e8%bd%ac%e6%8d%a2.html</link>
		<comments>http://www.imkevinyang.com/2009/11/%e6%85%8e%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%bc%ba%e5%88%b6%e8%bd%ac%e6%8d%a2.html#comments</comments>
		<pubDate>Thu, 12 Nov 2009 06:06:00 +0000</pubDate>
		<dc:creator>Kevin Yang</dc:creator>
				<category><![CDATA[其他随笔]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[类型转换]]></category>

		<guid isPermaLink="false">http://www.imkevinyang.com/2009/11/%e6%85%8e%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%bc%ba%e5%88%b6%e8%bd%ac%e6%8d%a2.html</guid>
		<description><![CDATA[<p>类型转换是我们写代码经常需要打交道的事情，C#中类型转换有两种常见的形式：</p>
<p>(BaseClass)obj </p>
<p>obj <span class="kwrd">as</span> BaseClass</p>
<p>同时，Convert类也提供了很多常用类型的转换接口。</p>
<p>我接下来要说的是第一种转换形式。</p>
<p>当使用第一种转换形式的时候，要求obj是null，或者是一个BaseClass类或其&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>类型转换是我们写代码经常需要打交道的事情，C#中类型转换有两种常见的形式：</p>
<p>(BaseClass)obj </p>
<p>obj <span class="kwrd">as</span> BaseClass</p>
<p>同时，Convert类也提供了很多常用类型的转换接口。</p>
<p>我接下来要说的是第一种转换形式。</p>
<p>当使用第一种转换形式的时候，要求obj是null，或者是一个BaseClass类或其派生类实例。否则转换会抛出异常（使用后一种形式则返回null）。这倒好理解，但是对于简单类型，就比较容易出错了。</p>
<pre class="csharpcode"><span class="kwrd">object</span> obj = 2;
<span class="kwrd">double</span> i = (<span class="kwrd">double</span>)obj;</pre>
<p>上面的代码会抛出一个InvalidCastException，这是因为使用前一种类型转换的时候，CLR运行时会进行类型匹配，因为obj的类型（int）和double不相匹配——虽然看起来是无损精度的转换——因此抛出异常。从这个例子中我们可以得到一个结论：</p>
<blockquote>
<p>除非你非常确定你要转换的源对象是什么类型，否则千万使用第一种形式，特别是对于简单类型更是如此。</p>
</blockquote>
<p>对于简单类型，建议采用Convert.ToXXX接口实现转换，可维护性高一些。</p>
<p align="right">——<a href="http://www.imkevinyang.com/"><em><strong>Kevin Yang</strong></em></a></p>

	标签：<a href="http://www.imkevinyang.com/tags/csharp" title="CSharp" rel="tag">CSharp</a>, <a href="http://www.imkevinyang.com/categories/techarticles/othertecharticles" title="其他随笔" rel="tag">其他随笔</a>, <a href="http://www.imkevinyang.com/tags/%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2" title="类型转换" rel="tag">类型转换</a><br />

	<h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.imkevinyang.com/2009/11/c%e4%b8%adreadonly%e5%92%8cconst%e7%9a%84%e5%8c%ba%e5%88%ab.html" title="C#中Readonly和const的区别 (2009/11/12)">C#中Readonly和const的区别</a> </li>
	<li><a href="http://www.imkevinyang.com/2009/03/%e9%9a%8f%e6%9c%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%94%9f%e6%88%90%e5%87%bd%e6%95%b0.html" title="随机字符串生成函数 (2009/03/23)">随机字符串生成函数</a> </li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.imkevinyang.com/2009/11/%e6%85%8e%e7%94%a8%e7%b1%bb%e5%9e%8b%e5%bc%ba%e5%88%b6%e8%bd%ac%e6%8d%a2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: www.imkevinyang.com @ 2012-02-09 10:31:56 -->
