【问题标题】:How to add repeated values to string collection?如何将重复值添加到字符串集合?
【发布时间】:2014-04-02 19:54:36
【问题描述】:

我目前正在做一个我已经做了几个月的项目。即将发布包含书签的第 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

【问题讨论】:

  • 在此处添加您的代码。它很小,没有理由将其放在外部站点上
  • 如果 Count 为 0,则 For 循环中多余的 If 语句将自动不循环。
  • @OlivierJacot-Descombes 这只是因为我要添加一个 Else 语句,它会在菜单中添加一个字符串,表明它是空的。
  • 好的,我添加了一个 Else-part。
  • @OlivierJacot-Descombes 谢谢。

标签: .net vb.net collections


【解决方案1】:

在您的循环中,您有一个名为 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)
       ....

【讨论】:

  • 啊谢谢。这有助于显示单个按钮。但是,它对每个值的倍数没有帮助...
  • @WillEccles:设置被永久保存。当您重新运行您的应用程序时,旧值仍然存在,您将再次添加它们!
  • @OlivierJacot-Descombes 运行按钮不使用保存的设置。它恢复为默认值,在这种情况下是一个空集合。此外,它有时会自己重复每件事,例如多次说“Google”,而如果它重新添加它们,则会在它们之间交替。
  • My.Settings.BookmarksNames.Add("Google") 之前添加一个Console.WriteLine(My.Settings.BookmarksNames.Count)
猜你喜欢
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2012-10-06
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多