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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP