Re: [問題] 資料型態轉換的問題

看板C_Sharp (C#)作者 (躂躂..)時間18年前 (2007/05/29 13:00), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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)

05/29 13:09, , 1F
太感謝了^^很詳細的解說,大概了解了,看來還是要多看書@@
05/29 13:09, 1F
※ 編輯: cole945 來自: 220.139.132.217 (05/29 15:08)
文章代碼(AID): #16MxE0Ql (C_Sharp)
文章代碼(AID): #16MxE0Ql (C_Sharp)