.net 如何向字符串集合添加重复值?

.net 如何向字符串集合添加重复值?,.net,vb.net,collections,.net,Vb.net,Collections,我现在正在做一个我已经做了几个月的项目。它即将发布版本2,其中将包括书签。为了存储这些书签,我使用了项目属性中的设置菜单。我创建了两个System.Collections.Specialized.StringCollection,一个名为“BookmarkNames”,另一个名为“BookmarkAddresses”。我在应用程序的菜单栏中有一个下拉菜单,其中有书签按钮。这些是在启动时通过使用for next循环迭代集合添加的。为了测试它,我让它每个添加2个项目。在按钮添加之前,我将“Bing”

我现在正在做一个我已经做了几个月的项目。它即将发布版本2,其中将包括书签。为了存储这些书签,我使用了项目属性中的设置菜单。我创建了两个
System.Collections.Specialized.StringCollection
,一个名为“BookmarkNames”,另一个名为“BookmarkAddresses”。我在应用程序的菜单栏中有一个下拉菜单,其中有书签按钮。这些是在启动时通过使用for next循环迭代集合添加的。为了测试它,我让它每个添加2个项目。在按钮添加之前,我将“Bing”和“Google”添加到
My.Settings.bookmarkmarknames
中,并将它们各自的地址添加到
My.Settings.bookmarkmarkmark地址中。我注意到,当它完成发布后,它只添加了一个按钮,叫做“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

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

这个变量是在代码中不可见的地方初始化的。但在循环内部,重复使用相同的实例。因此,您在第一个循环中正确地为Google添加了值,但在下一个循环中,您再次使用相同的变量并将其内容更改为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)
       ....

在这里添加您的代码。它很小,没有理由将它放在外部站点上。如果For循环是多余的,则If语句在计数为0时将自动不循环。@OlivierJacot Descombes它只是在那里,因为我要添加一个Else语句,该语句将向菜单中添加一个表示它为空的字符串。好的,我添加了一个其他部分。@OlivierJacot Descombes谢谢。啊,谢谢。这有助于显示单个按钮。但是,它对每个值的倍数没有帮助…@willecles:设置被永久存储。当您重新运行应用程序时,旧值仍然存在,您将再次添加它们@OlivierJacot描述运行按钮不使用保存的设置。它恢复为默认值,在本例中为空集合。此外,它有时会自己重复每件事,比如多次说“Google”,而如果它重新添加它们,则会在它们之间交替。在
My.Settings.BookmarksNames.Add(“Google”)之前添加
Console.WriteLine(My.Settings.BookmarksNames.Count)