C_Sharp 板


LINE

※ 引述《rayhill (....)》之铭言: : 最近写asp.net时,有一些关於转型的疑问 : 像是Application["myCount"] = Convert.ToInt32(Application["myCount"]; : 这样编译才会过,如果用(int)或int.parse则不行, : 不知道这几种转型主要的差异点在何处? : 谢谢各位大大了~ 那个 Application[] 的type是object, 所以你的问题跟 object o = 你放进去了某个东西; 再把 o 转成 int 是一样的问题 @.@" 依你放进去的东西型别不同, 要怎麽转int就会有不同的转法.. 如果你是放 int(或其他value type的东西)进去, 那就变成 boxing/unboxing的问题 http://msdn2.microsoft.com/en-us/library/yz2be5wk(VS.80).aspx object o = 123; // boxing int i = (int)o; // unboxing 123原本的value-type, 被你放进object(refernec-type)所以要会被boxing起来, 当要取回原值时, 再unboxing回value-type, 要注意前後两个type一定要一模一样 (不能进去时是short, 回来时变int) 如果你的 (int) 不是上面的unboxing, 那就变成 type casting.. http://msdn2.microsoft.com/en-us/library/xhbhezf4(VS.80).aspx 如果你放进去的型别没有实作这个 (int) coversion operator, 那就不能用 (int) 来转 若你放进去的东西是 string, 那就不能用这个方法转, 因为string没有实作.. 不然可以转成该型别, 再casting成int int i = (int)( o as 某个型别); 再来就是 Int.Parse和 Convert 的问题.. Int.Parse(或其他xxx.Parse)是用来把 string 转成该型别的, 如果你的放进去的东西是 string, 那用 Int.Parse就可以了 int i = int.Parse( o as string); 也就是你的 int i = int.Parse( Application["myCount"] as string); 或写成 int i = int.Parse( (string)Application["myCount"] ); 当然要 int i = int.Parse( Application["myCount"].toString() ); 也可以 你会发生不能转的主要问题应该是 Application[] 的型别是 object, 型是 int.Parse 要的型别是string, 所以你要先转回 string才能使用 要注意最後一种 .toString() 的语意和其他三者不同, 虽然可以达到一样的效果.. 如果原本的型别就是 string, 那就可以用 (string) 或 as string转成原本的string 但 toString() 则是呼叫 object 下的 toString() 因为 string class 覆写了object的toStrnig, 所以你呼叫toString() 时会变成呼叫原本 string 的 toString() (也就是传回string的字串值) 而若object是int, 那 totring() 变成呼叫 int的toString.. 不管是 string s = "123"; s.toString()为"123" int i = 123; i.toString() 也是 "123" 所以某方面来说, 用toString()的方法不管在int或string都通用, (通用, 但也许效率较差?) 而 Convert 的话, 通用来说是转换实作 IConvertible 的型别 class MyType: IConvertible { public int i = 0; public int ToInt32(IFormatProvider provider) { return i; } /* 其他略 */ } 像实作 IConvertible 的 ToInt32就可以让你自己的class(即MyType)利用 Convert.ToInt32( new MyType() ) 转成 int string也有实作 IConvertible界面, 所以string也可以用 Conver.ToInt32 来转成 int --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.139.132.217 ※ 编辑: cole945 来自: 220.139.132.217 (05/29 13:01)
1F:推 rayhill:太感谢了^^很详细的解说,大概了解了,看来还是要多看书@@ 05/29 13:09
※ 编辑: cole945 来自: 220.139.132.217 (05/29 15:08)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP