今天在寫程序過程中發現了.net里的一個奇怪現象,就是給數組給數組賦值時竟然是"指向數組的地址",即數組給數組賦值時不是生成一個新的值后傳給數組保存,而是傳給該數組的地址給數組.打個比方:有數組a和數組b.現在把數組b賦給數組a.而則時數組a不是保存數組b的值而是保存數組b的內存地址,這就產生一個問題:如果數組b的值改變則數組a的值也跟著改變!!!....而在asp就不是這樣情況,vb也可能不是這樣,我的機沒有vb.所以測試不了...
這樣說可能還不是很清楚(我的表達能力就是很差),給一段示例代碼就知:
vb.net的代碼:
sub testcode()
dim test(4) as array, randomtext(1) as string
dim ran as new random, i, j as integer
for i = 0 to 4
for j = 0 to 1
randomtext(j) = ran.next(100)
next
test(i) = randomtext
next
for i = 0 to 4
msgbox(test(i)(0) & "|" & test(i)(1))
next
end sub
運行上面代碼你可發現,五次顯示的結果都是一樣的...如果你以為random時產生相同的值,那么你可以使用一步步調試.在"自動窗口"中你會發現每當循環時,test(i-1)里面的值總是跟著test(i)的值改變....這也說明了我在上面所說的問題,即數組賦值給數組時是"傳址"而不是"傳值"保存....但如果不是數組則不會有這樣的情況出現!解決方法是把randomtext(1) as string的定義放到第一個循環的里面即可,即每循環一次生成一個新的數組
讓我們看看在asp里會不會也是相同的情況吧
asp代碼:
<%@language="vbscript"%>
<%
randomize
dim test(4), randomtext(1)
dim ran, i, j
for i = 0 to 4
for j = 0 to 1
randomtext(j) = int(rnd(time)*100+1)
next
test(i) = randomtext
next
for i = 0 to 4
response.write test(i)(0) & "|" & test(i)(1) & "<br>"
next
%>
運行后你會發現5行的數據都是不同的!!!即在asp里數組賦值給數組是"傳值"而不是"傳址"保存!!!!
.net怎么變了??很多東西都變了...變得習慣了還是不習慣了?