none
ArrayList 的晚期繫結 RRS feed

  • 問題

  • 先做一個結構

        Private Structure testStruct
            Dim x As Integer
        End Structure


    然後將這個結構的變數加入ArrayList的物件

            Dim TS As testStruct
            Dim AL As New ArrayList
    
            TS.x = 1
            AL.Add(TS)

    但是要更改物件的值的時候……!

    AL(0).x = 2

    就會出現……

    '晚期繫結運算式的運算結果為 'testStruct' 時,將晚期繫結指派至實值類型 'testStruct' 的欄位是無效的。

    請問各位先進,有辦法更改這個值嗎?
    (小弟使用的是VB2015)




    • 已編輯 ニテン 2015年10月8日 下午 06:54 有謎空白行
    2015年10月8日 下午 06:35

解答

  • 我覺得先指派TS.x的值

    再將新的TS指派給AL(0)

    也就是

     TS.x = 2
     AL(0) = TS

    • 已標示為解答 ニテン 2015年10月9日 上午 04:20
    2015年10月9日 上午 03:19

所有回覆

  • 請將

    AL(0).x = 2

    改成:

    Dim tsElement As testStruct = AL(0)
    tsElement.x = 2

    2015年10月9日 上午 02:16
  • 我覺得先指派TS.x的值

    再將新的TS指派給AL(0)

    也就是

     TS.x = 2
     AL(0) = TS

    • 已標示為解答 ニテン 2015年10月9日 上午 04:20
    2015年10月9日 上午 03:19
  • 感謝this大大的解答,我試了一下
    結果沒有更改到 AL(0).x 的值
    但如果,和sel0918大大的方法結合起來的話,就可以了

            Dim tsElement As testStruct
            tsElement.x = 2
            AL(0) = tsElement

    2位大大合起來的答案,正好是我需要的
    非常感謝



    • 已編輯 ニテン 2015年10月9日 上午 04:44
    2015年10月9日 上午 04:16
  • 感謝sel0918大大的解答,這樣做的確有改到 AL(0).x 的值

    • 已編輯 ニテン 2015年10月9日 上午 04:32
    2015年10月9日 上午 04:20
  • 題外話, ArrayList 是一個以 object 型別為元素的集合, 若是考慮到 實值型別與參考型別間 boxing, unboxing 的轉換效能耗損.應該使用泛型的 List(of T) 替代 ArrayList.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年10月9日 上午 05:09
    版主
  • Bill Chung大大,試了一下,迴圈跑十萬次,果然差很多!
    感謝提醒!

    2015年10月9日 上午 07:00