【问题标题】:Populate list box from string on different lines从不同行的字符串填充列表框
【发布时间】:2020-05-24 00:12:32
【问题描述】:

我有一个查询,它返回一个列表框中但不在另一个列表框中的项目列表。我想将结果放入不同的列表框中,问题是当我尝试将结果放入列表框时,它会将它们全部放在同一行。假设它返回三个结果(project_green Project_blue_project_red),它将它们作为(project_greenproject_blueproject_red)添加到列表框中的一行。我希望每个项目都在自己的行中,但我无法将它放在那里。

这是我的代码

Dim result As List(Of String) = (From s1 As String In Me.ListBox1.Items Where Not Me.ListBox4.Items.Contains(s1) Select s1).ToList()
ListBox5.Items.Add(String.Join(Environment.NewLine, result))

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 再次来自hereListBox5.Items.AddRange(ListBox1.Items.Cast(Of String).Except(ListBox4.Items.Cast(Of String)).ToArray)

标签: vb.net


【解决方案1】:
Dim result = From s1 As String In ListBox1.Items Where Not ListBox4.Items.Contains(s1) Select s1
ListBox5.Items.AddRange(result)

这也为您节省了大量额外的内存。当 IEnumerable 结果表单 linq 查询已经自行完成时,无需分配 List

虽然我个人不喜欢查询理解语法,但更喜欢这样写:

Dim result = ListBox1.Items.Where(Function(s1) Not ListBox4.Items.Contains(s1))
ListBox5.Items.AddRange(result)

【讨论】:

  • 我试图只输入结果,但我收到此错误重载解析失败,因为在没有缩小转换的情况下无法调用可访问的“AddRange”:'Public Overloads Sub AddRange(value As ListBox.ObjectCollection) ':参数匹配参数 'value' 从 'IEnumerable(Of String)' 缩小到 'ListBox.ObjectCollection'。 'Public Overloads Sub AddRange(items As Object())':参数匹配参数 'items' 从 'IEnumerable(Of String)' 缩小到 'Object()' 如果我使用较短的代码,我会收到此错误 'Where' is不是“ListBox.ObjectCollection”的成员
  • 启用 Option Strict 后,我​​在第一个列表中的 As String 上收到错误消息。我相信物品就是对象。
  • 在第二个列表中.Where 不是 ListBox.ObjectCollection 的成员(没有扩展方法)。
  • 只需将第一个列表中的As String.AddRange(result) 删除为.AddRange(result.ToArray)
  • 该死的,我试着在不同的地方排列,但我猜不是在那里。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
相关资源
最近更新 更多