Akorát že tohle je špatně, protože MyPoint je třída a ne struktura. Vy do proměnné MyPoint nejdřív přiřadíte novou instanci objektu, a pak jí v cyklu 100x měníte její vlastnosti, ale přidáváte pořád tu samou instanci do seznamu. MyPoint nereprezentuje přímo objekt, ale jenom ukazatel na objekt. Čili vy do seznamu přidáte 100 ukazatelů na stejný objekt. Aby bylo jasno, protože MyPoint je třída, pak se nikdy její instance nekopírují, vždycky se přidá jenom odkaz:
Dim a As MyPoint = New MyPoint() 'vytvoří v paměti 1 objekt MyPoint a do proměnné a uloží ukazatel na tento objekt
Dim b As MyPoint
b = a 'do b uloží to, co je v a, tedy ne objekt, ale jenom ukazatel (objekt zůstává pořád jeden a a i b ukazují na něj)
b.X = 10 'objektu, na který ukazovalo b, nastavíme X na 10
MsgBox(a.X) 'vypíše 10, protože a i b ukazují na stejný objekt
To je rozdíl oproti strukturám. Kdyby MyPoint byla struktura, fungovalo by to tak, že při zapsání b = a by se struktura fyzicky v paměti zkopírovala, a tedy změnou b.X by se a.X neovlivnilo. Váš kód je tedy správně takto:
Dim myPoints As New List(Of MyPoint)(100) ' TOTO MI POMOHLO
For n As Integer = 0 To 99
'Přidání nového bodu do seznamu
'(parametry se předají v konstruktoru)
Dim myPoint as New MyPoint()
myPoint.Barva = dt.Rows(n)(0)
myPoint.X = dt.Rows(n)(1)
myPoint.Y = dt.Rows(n)(2)
myPoints.Add(MyPoint)
Next
Jediná změna je ta, že se deklarace proměnné MyPoint a vytvoření instance objektu přesunula dovnitř cyklu, tím pádem se vytvoří 100 instancí a každá bude jiná.
|