锁定列表(类)

时间:2014-05-28 14:26:38

标签: vb.net

我编写了一个程序,用于从数百个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()列表?

1 个答案:

答案 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_ENTRYentry_f是对同一对象的引用。

您必须创建对象,并将其添加到ENTRY_