我编写了一个程序,用于从数百个csv文件中提取数据,然后将该数据发布到名为List (of Class)
的{{1}}。
数据放入后,我需要将数据重组为层次结构,指示级别等。我首先确定哪些ENTRY_ENTRY
行是层次结构的顶部。
此信息存储在名为ENTRY_
的列表中。
为此,我遍历LIST_LIST
列表,然后在原始列表LIST_LIST
中选择匹配信息,将值复制到新的类实例ENTRY_ENTRY
中,操纵数据,然后将信息添加到名为Entry_F
的新List (of Class)
。我还跟踪哪个ENTRY_FINAL
行是最后一个要运行的行,然后返回到它。
所有编码工作正常。
类中的一个字段跟踪每行中层次结构中的级别。
我编写了代码,因此没有对ENTRY_
列表进行修改,但有些内容正在写回ENTRY_ENTRY
。
有没有办法在ENTRY_ENTRY
列表设置后锁定它?
以下部分代码。
ENTRY_ENTRY
Public Sub levels()
For Each List_ As LIST_ARRAY In LIST_LIST
If List_.List_TopLevel = True Then ' finds top level parts sheets
'MsgBox(List_.List_FileName & " : Top level : " & List_.List_Ref)
templevel1 = List_.List_Ref
For Each ENTRY_ As ENTRY_ARRAY In ENTRY_ENTRY
If ENTRY_.Entry_List_Ref = templevel1 Then ' Checks for same List Ref
entry_F = ENTRY_
' entry_f.Entry_Level = ENTRY_.Entry_Level 'increases level
Entry_Final.Add(entry_F) 'adds line to final array
If entry_f.Entry_LinkRef <> "" Then
entry_1 = ENTRY_
sublevel2()
End If
End If
Next
End If
Next
End Sub
Sub sublevel2()
'MsgBox("Sublevel2 start " & entry_f.Entry_LIST_FileName & " : " & entry_f.Entry_LinkRef & " : " & entry_f.Entry_Level)
'For Each ENTRY_f As ENTRY_ARRAY In Entry_Final.ToArray
If entry_f.Entry_LinkRef <> "" Then
templevel2 = entry_f.Entry_LinkRef
'MsgBox("templevel assigned")
For Each ENTRY_ As ENTRY_ARRAY In ENTRY_ENTRY.ToArray
If ENTRY_.Entry_List_Ref = templevel2 Then
'MsgBox("found child")
entry_f = ENTRY_
entry_f.Entry_Level = entry_f.Entry_Level + entry_1.Entry_Level 'increases level
Entry_Final.Add(entry_f) 'adds line to final array
' MsgBox("added line")
If entry_f.Entry_LinkRef <> "" Then
entry_2 = ENTRY_
sublevel3()
End If
End If
'MsgBox("Finished " & ENTRY_.Entry_PartNo & " : " & ENTRY_.Entry_LIST_FileName & " : " & templevel2)
Next
ENTRY_ = entry_1
End If
MsgBox("next child")
End Sub
是Sublevel3()
我在哪里将更新的信息写回Sublevel2()
列表?
答案 0 :(得分:1)
嗯,您的代码/您的问题很难理解,但我想问题是:
...在原始列表
ENTRY_ENTRY
中挑选匹配信息,将值复制到新的类实例Entry_F
中,操纵数据,然后将信息添加到新的{{1} }List (of Class)
。
您似乎在谈论代码的这一部分:
ENTRY_FINAL
请注意,您不在此处创建班级的新实例:
For Each ENTRY_ As ENTRY_ARRAY In ENTRY_ENTRY.ToArray
If ENTRY_.Entry_List_Ref = templevel2 Then
entry_f = ENTRY_
entry_f.Entry_Level = entry_f.Entry_Level + entry_1.Entry_Level 'increases level
Entry_Final.Add(entry_f)
...
如果您更改entry_f = ENTRY_
,就像在此处一样:
entry_f
您更改列表entry_f.Entry_Level = entry_f.Entry_Level + entry_1.Entry_Level 'increases level
中的同一个实例,因为ENTRY_ENTRY
和entry_f
是对同一对象的引用。
您必须创建新对象,并将其添加到ENTRY_
。