如何将重复值添加到字符串集合?

时间:2014-04-02 19:54:36

标签: .net vb.net collections

我目前正在做一个我已经做了几个月的项目。它已接近发布版本2,其中包括书签。为了存储这些书签,我使用了项目属性中的“设置”菜单。我创建了两个System.Collections.Specialized.StringCollection,一个名为“BookmarkNames”,另一个名为“BookmarkAddresses”。我的应用程序中带有书签按钮的菜单栏的下拉菜单中有一个菜单。这些是在启动时通过使用for-next循环遍历集合而添加的。为了测试它,我让它为每个添加2个项目。在添加按钮之前,我将“Bing”和“Google”添加到My.Settings.BookmarkNames,并将其各自的地址添加到My.Settings.BookmarkAddresses。我注意到,当它完成启动时,它只添加了一个名为“Bing”的按钮。单击该按钮确实转到Bing站点,因此它必须做正确的事情。但是,它已经跳过谷歌。为了看看发生了什么,我在for-next循环的末尾添加了一个简单的Console.PrintLine()。这将打印出BookmarkNames集合中当前所在的项目,因此它应该打印两行:“Google”和“Bing”。但是,它打印每个的随机数,有时它会说“Google”5次,然后在“Google”和“Bing”之间交替。

我的问题很简单:额外重复值的原因是什么?为什么要添加和打印?我可以自己弄清楚整个“创建一键”的问题,只要我能弄清楚那里发生了什么。

相关代码为:

'WRE: This loads the bookmarks into the bookmarks menu.
My.Settings.BookmarksNames.Add("Google")
My.Settings.BookmarksAddresses.Add("http://www.google.com/")
My.Settings.BookmarksNames.Add("Bing")
My.Settings.BookmarksAddresses.Add("http://www.bing.com/")
If My.Settings.BookmarksAddresses.Count > 0 Then
    For counter As Integer = 0 To My.Settings.BookmarksAddresses.Count - 1
        bmb.Text = My.Settings.BookmarksNames.Item(counter)
        bmb.bookmarkURL = My.Settings.BookmarksAddresses.Item(counter)
        but_Bmarks.DropDownItems.Add(bmb)
        Console.WriteLine(My.Settings.BookmarksNames.Item(counter))
    Next
Else
    ...
End If

1 个答案:

答案 0 :(得分:1)

在你的循环中,你有一个名为bmb的变量,它似乎是某种对象。

这个变量值在代码中的某个地方初始化。但是在循环内部重用了相同的实例。因此,您首先循环为Google添加正确的值,但在下一个循环中,yuo再次使用相同的变量并将其内容更改为Bing。通过这种方式,您还可以更改已添加的内容

在循环内部,您需要重新初始化变量

   For counter As Integer = 0 To My.Settings.BookmarksAddresses.Count - 1
       bmb = new SomeKindOfClassHere();
       bmb.Text = My.Settings.BookmarksNames.Item(counter)
       bmb.bookmarkURL = My.Settings.BookmarksAddresses.Item(counter)
       but_Bmarks.DropDownItems.Add(bmb)
       ....
相关问题