2016-07-14 2 views
0

Учитывая класс ...Изменение значения элемента в списке объектов vb.net, делая для-следующий

Public Class Method 
Public Property Sequence as integer 
End class 

и следующей функции

Public shared function SetMethod(Methods as List(of Method)) 
Dim i as integer 

For i = 0 To (Methods.Count - 1) 
    Methods(i).Sequence = i 
next i 

End function 

... почему это эти функции всегда меняют все элементы в списке методов? Например, если methods.count = 10, то почему все методы.Sequence будут иметь значение 10?

Как я могу заставить все предметы иметь другое значение?

+4

Зависит от того, как формируется список, если добавить один и тот же объект в список 10 раз, тогда действительно все элементы списка (ссылка 1 объект в памяти) будет иметь последовательность 10. – Esko

+1

Возможно, все объекты метода относятся к одному и тому же объекту: p ie. 10 дубликатов ссылок. – ABuckau

ответ

4

Код должен работать как есть. Но я думаю, что вы назначили всегда один и тот же объект в списке вместо десяти разных.

Так что-то вроде этого:

Dim methods as New List(Of Method) 
Dim m1 As New Method() 
For i As Int32 = 1 To 10 
    methods.Add(m1) 
Next 

Изменить это:

Dim methods as New List(Of Method) 
For i As Int32 = 1 To 10 
    Dim m1 As New Method() 
    methods.Add(m1) 
Next 

Первый подход добавит тот же самый объект десять раз к списку. Поэтому, изменив все, вы измените все. Второй подход фактически создаст десять различных объектов и будет правильным способом.

Побочное примечание:

Первый подход будет на самом деле добавить ссылку на m1 десять раз в список, так как все классы ссылочные типы. Это был тип значения, который создавал бы «копии». Поэтому, если вы измените класс Method на Structure, он «сработает».

Debug.Assert(ReferenceEquals(methods(0),methods(1))) 

Это никогда не верно, если Method был Structure (тип значения), но всегда, если это та же ссылка, как это, кажется, в вашем случае. Но это не предложение использовать структуры вместо классов. Он должен просто показать вам разницу ссылочных и стоимостных типов.

1

Ваш код в порядке. Способ создания списка может быть неправильным.

Попытка вызвать SetMethods используя следующие для справки:

Dim listOfMethods = New List(Of Method)() 

For i As Integer = 0 To 9 
    listOfMethods.Add(New Method()) 
Next 
SetMethod(listOfMethods) 
Смежные вопросы