Vb.net 如何通过值交换两个类,而不是引用?

Vb.net 如何通过值交换两个类,而不是引用?,vb.net,Vb.net,ArrayList中有两个类。我想交换它们的所有值,但不交换它们的引用。例如,arraylist1(1)在交换后引用同一个类,其值已更改 如果我这样改变它们 Dim someclass1 as new someclass Dim someclass2 as new someclass arraylist1(1) = someclass1 arraylist1(2) = someclass2 temp = arraylist1(1) arraylist1(1) = arraylist1(2) ar

ArrayList
中有两个类。我想交换它们的所有值,但不交换它们的引用。例如,arraylist1(1)在交换后引用同一个类,其值已更改

如果我这样改变它们

Dim someclass1 as new someclass
Dim someclass2 as new someclass
arraylist1(1) = someclass1
arraylist1(2) = someclass2
temp = arraylist1(1)
arraylist1(1) = arraylist1(2)
arraylist1(2) = temp
arraylist1(1)只是引用了someclass2,但实际上我希望它引用了具有someclass2值的someclass1。
现在我只需逐一交换它们的重要属性。

您需要自己一个一个地复制属性。您可以通过向类中添加两个方法来简化此过程:

Public Class SampleClass
    Public Property Id As Integer
    Public Property Name As String

    Public Function Clone() As SampleClass
        Return New SampleClass With
        {
            .Id = Me.Id,
            .Name = Me.Name
        }
    End Function

    Public Sub Init(input As SampleClass)
        With Me
            .Id = input.Id
            .Name = input.Name
        End With
    End Sub

    Public Shared Sub SwapValues(value1 As SampleClass, value2 As SampleClass)
        Dim temp = value1.Clone()
        value1.Init(value2)
        value2.Init(temp)
    End Sub
End Class
然后在尝试交换值时:

SampleClass.SwapValues(list(0), list(1))

您必须自己编写代码来交换所有字段和属性。框架不会为您执行此操作。2018年谁会使用ArrayList?自VS2005以来,它一直是一种遗留类型,只是为了向后兼容。对象,而不是类。“例如,arraylist1(1)表示交换后的同一类”。相同的对象,不同的类。想想真实的世界。你和我都是人
Person
是类,而你和我是对象,即该类的实例。@JoelCoehoorn所以现在列表取代了它?