首页 新闻 会员 周边

在.net中 类型转换

0
悬赏园豆:10 [已解决问题] 解决于 2012-07-02 11:29

int i = 1;

Double d = (Double) i;与

Double d1 =Convert.Touble(i);有什么区别

高手可以详细说明一下吗??或者直接发QQ给我说 821359827

水行者的主页 水行者 | 初学一级 | 园豆:34
提问于:2012-06-14 10:45
< >
分享
最佳答案
0

反编译你看,是一样的! 你第一个也可以 隐式转换  

int i = 1;

Double d = i;

反过来就要显示!

收获园豆:5
xu_happy_you | 菜鸟二级 |园豆:222 | 2012-06-15 14:11
其他回答(3)
1

可以说是完全一样的。

事实上,你还可以写成:

double d2=i;


这些都会由.NET的类型转换机制完成,无论使用的是哪个方案,最终都会归结到同一个点来达到目的。

如果你一定想知道有什么区别,这个第一个方案和我写的方案是没办法查看的(这个是语言内置了的),但使用CONVERT的方案你则可以通过REFLECTOR之类的工具反编译代码后查看过程,这个过程就是你的第一个方案与我说的方案的具体实现。

如果想知道性能,可以调用STOPWATCH来观察,只是这个时间非常非常短,可以 忽略为0。

收获园豆:3
无之无 | 园豆:5095 (大侠五级) | 2012-06-14 10:51

挺别人说这个和值类型和引用类型有关 是真的吗?? 弄的我想当纠结,这个是今天遇到的一个问题,用Double转换报错但用Convert.ToDouble就没问题 这个怎么解释呀

支持(0) 反对(0) 水行者 | 园豆:34 (初学一级) | 2012-06-14 10:53

@水行者: 其实就是装箱与拆箱的问题。用convert呢,相对安全点,而且convert还可以自定义(特别是两个类型之间不相关的 时候,使用ICONVERTABLE接口)。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-14 10:58

那要按你这个意思说Convert是引用类型,而Double是值类型的

支持(0) 反对(0) 水行者 | 园豆:34 (初学一级) | 2012-06-14 13:02

@水行者: Convert是一个转换器,主要是调用被转换对象的所实现的 ICONVERTABLE接口来执行转换。对于int等系统类型,则会使用默认的转换器(通过CULTUREINFO的 CURRENT来获得)。

支持(0) 反对(0) 无之无 | 园豆:5095 (大侠五级) | 2012-06-14 13:40
0

http://developer.51cto.com/art/200908/145643.htm

無限遐想 | 园豆:3740 (老鸟四级) | 2012-06-14 14:19
0

使用Reflector查看Convert的源代码就会发现, Convert.ToDouble(Int32)的实现就是return (double) value;

收获园豆:2
Darren Fang | 园豆:215 (菜鸟二级) | 2012-06-14 23:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册