Re: [問題] 資料型態轉換的問題
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章