更改对象vb.net列表中的项目值,执行for-next

时间:2016-07-14 09:38:51

标签: 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,为什么所有methods.Sequence都将具有值10?

如何让所有商品都有不同的价值?

2 个答案:

答案 0 :(得分: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的引用添加十次到列表中,因为所有类都是引用类型。这是一种它会创造的价值类型" copy"。因此,如果您要将课程Method修改为Structure,那么它将会工作#34;

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

如果MethodStructure(值类型),则永远不会如此,但如果它与您的案例中的引用相同,则始终如此。但这并不是建议使用结构而不是类。它应该只显示参考和值类型的区别。

答案 1 :(得分:1)

你的代码很好。 您创建列表的方式可能有误。

尝试使用以下内容调用SetMethods以供参考:

Dim listOfMethods = New List(Of Method)()

For i As Integer = 0 To 9
    listOfMethods.Add(New Method())
Next
SetMethod(listOfMethods)