鉴于班级......
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?
如何让所有商品都有不同的价值?
答案 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)))
如果Method
是Structure
(值类型),则永远不会如此,但如果它与您的案例中的引用相同,则始终如此。但这并不是建议使用结构而不是类。它应该只显示参考和值类型的区别。
答案 1 :(得分:1)
你的代码很好。 您创建列表的方式可能有误。
尝试使用以下内容调用SetMethods以供参考:
Dim listOfMethods = New List(Of Method)()
For i As Integer = 0 To 9
listOfMethods.Add(New Method())
Next
SetMethod(listOfMethods)