List <t> .Insert方法影响多于调用insert方法的一个元素

时间:2016-02-29 19:01:35

标签: .net vb.net

我有一个包含&#34; sub&#34;的对象列表。对象列表。
此列表基于日历日,每个日历日包含日期,其他一些属性以及 DayParts 列表属性,如:

Public Property DayParts As List(Of CalendarDayPart)

我正在使用列表(T)。插入方法将手动创建的 CalendarDayPart 插入列表 DayParts 特定日期。

问题

插入方法是在所选日期 DayParts 列表中插入手动创建的 CalendarDayPart AND 每隔一天在选定日期之前或之后的16日。

实施例

BlockDays 是日历天数列表

'' get the desired calendar day from the month's list of calendar days
Dim cDay As CalendarDay = BlockDays.ElementAt(25)

''change calDay to have one more parts and not defualt value
cDay.TotalDayParts += 1

''manually create CalendarDayPart 
Dim cDayPart As New CalendarDayPart With {.CalendarID = cal.CalendarID,
                                        .DayPartID = 0,
                                        .CreatedDate = Now,
                                        .OverlayTypeID = spDay.OverlayTypeID,
                                        .PartPriority = spDay.InjectPriority,
                                        .DayID = cDay.DayID,
                                        .ColorCode = spDay.InjectColorCode
                                        }

''increase value of all day parts with same priority or higher
For Each cPart In (From p In cDay.DayParts Where p.PartPriority >= spDay.InjectPriority Select p).ToList
    cPart.PartPriority += 1
Next

''inject CalendarDayPart part at specified priority 
cDay.DayParts.Insert(spDay.InjectPriority - 1, cDayPart)
''THE ABOVE LINE IS THE PROBLEM

请注意最后一行是问题所在。 cDay.DayParts.Insert CalendarDayPart 插入名为 DayParts ,来自&#34; parent&#34;的特定(和单个)选定元素名单。

问题是指如果我在代码中将监视添加到父列表中的索引值大于或小于所选索引的任何父元素(设置如下: BlockDays.ElementAt(25))然后这些附加元素还将 CalendarDayPart 添加到 DayParts list

我一直在这里撞墙,我尝试为列表创建新对象,但这并没有解决问题。

使用监视/断点我可以确认插入发生的示例中的最后一行代码是元素和其他元素插入的确切时刻 CalendarDayPart 已添加到 DayParts 列表。

我希望我说得够清楚。

问题

有人可以帮我弄清楚为什么list(t).Insert方法比调用方法的单个元素影响更多吗?

由于

ANSWER

我必须将folling .toList添加到CalendarDayPart的创建中,因为它使用16项日期列表来构建月份。

Dim CurrentDay As New CalendarDay With {.CalendarID = rd.CalendarID,
                                        .DayID = rd.DayID,
                                        .DayOrder = d,
                                        .CreatedDate = Now,
                                        .TotalDayParts = rd.TotalDayParts,
                                        .DayParts = rd.DayParts.ToList, ''have to use toList to force new items, not just pointer to existing list in rotation day
                                        .UpdatedDate = Now}

注意rd.DayParts.ToList 这是rotationDay的DayParts。如果我有rd.DayParts它会引用同一天的部分。

0 个答案:

没有答案