Vb.net 如何制作我的列表的深度副本 Dim i=2 做正确的事 i+=1 如果IsDBNull(TmDataSet.T.Rows(0)(i))=True,则退出Do 使新列车变暗 new_t.id=TmDataSet.t.Rows(0)(i) 尺寸j=0 直到IsDBNull(TmDataSet.T.Rows(j+1)(i))为止 j+=1 直到(TmDataSet.T.Rows(j)(i)-1) j+=1 环 如果是IsDBNull(TmDataSet.T.Rows(j+1)(i)),则退出Do 将新街变暗为新站 new_st.t=TmDataSet.t.Rows(j)(i) new_st.name=TmDataSet.T.Rows(j)(1) new_st.id=TmDataSet.T.Rows(j)(2) new_st.id_t=new_st.id.ToString和new_st.t 将新的st2变暗为新的车站 直到(TmDataSet.T.Rows(j+1)(i)-1) j+=1 环 new_st2.t=TmDataSet.t.Rows(j+1)(i) new_st2.name=TmDataSet.T.Rows(j+1)(1) new_st2.id=TmDataSet.T.Rows(j+1)(2) new_st2.id_t=new_st2.id.ToString和new_st2.t Dim列表作为新列表(车站) 列表。添加(新建) 列表.添加(新的\u st2) 新地址(列表) 环 每个网络。添加(新) 环
'网络=每个网络的深度副本Vb.net 如何制作我的列表的深度副本 Dim i=2 做正确的事 i+=1 如果IsDBNull(TmDataSet.T.Rows(0)(i))=True,则退出Do 使新列车变暗 new_t.id=TmDataSet.t.Rows(0)(i) 尺寸j=0 直到IsDBNull(TmDataSet.T.Rows(j+1)(i))为止 j+=1 直到(TmDataSet.T.Rows(j)(i)-1) j+=1 环 如果是IsDBNull(TmDataSet.T.Rows(j+1)(i)),则退出Do 将新街变暗为新站 new_st.t=TmDataSet.t.Rows(j)(i) new_st.name=TmDataSet.T.Rows(j)(1) new_st.id=TmDataSet.T.Rows(j)(2) new_st.id_t=new_st.id.ToString和new_st.t 将新的st2变暗为新的车站 直到(TmDataSet.T.Rows(j+1)(i)-1) j+=1 环 new_st2.t=TmDataSet.t.Rows(j+1)(i) new_st2.name=TmDataSet.T.Rows(j+1)(1) new_st2.id=TmDataSet.T.Rows(j+1)(2) new_st2.id_t=new_st2.id.ToString和new_st2.t Dim列表作为新列表(车站) 列表。添加(新建) 列表.添加(新的\u st2) 新地址(列表) 环 每个网络。添加(新) 环,vb.net,list,Vb.net,List,'网络=每个网络的深度副本 vb>>>我只想将per_network的内容复制到网络,我尝试了ToList方法,但它是浅层复制,无法执行克隆方法。我根本没有得到它。您可以创建一个扩展方法,在该方法中序列化对象,然后再次反序列化它。这将使用它自己的引用创建一个新对象,从而创建一个深度副本 Dim i = 2 Do While True i += 1 If IsDBNull(TmDataSet.T.Rows(0)(i)) = True Then Exit D
vb>>>我只想将per_network的内容复制到网络,我尝试了ToList方法,但它是浅层复制,无法执行克隆方法。我根本没有得到它。您可以创建一个扩展方法,在该方法中序列化对象,然后再次反序列化它。这将使用它自己的引用创建一个新对象,从而创建一个深度副本
Dim i = 2
Do While True
i += 1
If IsDBNull(TmDataSet.T.Rows(0)(i)) = True Then Exit Do
Dim new_t As New train
new_t.id = TmDataSet.T.Rows(0)(i)
Dim j = 0
Do Until IsDBNull(TmDataSet.T.Rows(j + 1)(i))
j += 1
Do Until (TmDataSet.T.Rows(j)(i) <> -1)
j += 1
Loop
If IsDBNull(TmDataSet.T.Rows(j + 1)(i)) Then Exit Do
Dim new_st As New station
new_st.t = TmDataSet.T.Rows(j)(i)
new_st.name = TmDataSet.T.Rows(j)(1)
new_st.id = TmDataSet.T.Rows(j)(2)
new_st.id_t = new_st.id.ToString & new_st.t
Dim new_st2 As New station
Do Until (TmDataSet.T.Rows(j + 1)(i) <> -1)
j += 1
Loop
new_st2.t = TmDataSet.T.Rows(j + 1)(i)
new_st2.name = TmDataSet.T.Rows(j + 1)(1)
new_st2.id = TmDataSet.T.Rows(j + 1)(2)
new_st2.id_t = new_st2.id.ToString & new_st2.t
Dim list As New List(Of station)
list.Add(new_st)
list.Add(new_st2)
new_t.st.Add(list)
Loop
per_network.Add(new_t)
Loop
编辑:
以上是我的代码所需的导入:
Dim network As List(Of train) = per_network.DeepCopy()
这是我使用的代码
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
基本上,deepCopies是_dictOfBalances1.Keys的深度副本
如果deepCopies是浅拷贝,则此代码将不起作用
Dim deepCopies = _dictOfBalances1.Keys.ToList
顺便说一下,我不知道你是否看过,但我终于回答了你的另一个问题。我为这么长时间的等待表示歉意。@VisualEvent非常感谢您和您的努力,我找不到合适的词对您说我现在就检查它,我真的很感激这不是我考虑过的一个选项。@jmchilinney:您的也很好,可能占用的内存更少。唯一的另一个区别是我的可以执行任何类型的深度复制。:)@程序集“TDSP,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”中的VisualIncent错误类型“WindowsApplication1.train”未标记为可序列化。@AlKobtan:按如下方式编写类声明:
公共类train
@AlKobtan:很高兴听到这个消息。请按帖子左侧的复选标记,将我的答案标记为已接受。:)
Dim deepCopies = _dictOfBalances1.Keys.ToList
For Each code In deepCopies
If allthecoincode.Contains(code) Then
Else
_dictOfBalances1.Remove(code)
'deletedKeys.Add(code)
End If
Next