You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net查找字符串数组重复项的代码运行故障排查

结论

你提供的这段用于提取数组重复元素的VB.NET代码本身可正常运行,切换数组存储不会导致该段代码失效,故障点确实在其他代码段。

这段LINQ逻辑的执行不依赖具体的存储载体,只要传入的WithDuplicates是可枚举的字符串集合(包括String数组、List(Of String)等),就能正确完成以下操作:

  • 按元素值对集合内容分组
  • 筛选出出现次数大于1的分组(即存在重复的元素值)
  • 提取每个重复值的第一个实例,最终转换为独立的重复元素数组
优先排查的故障点

针对你从RichTextBox切换到数组存储、涉及线程适配的场景,优先检查以下高频问题:

  • 数组赋值时序问题:跨线程场景下容易出现工作线程执行去重逻辑时,UI线程还未完成RichTextBox内容到数组的写入,导致传入的WithDuplicates是空数组或未完成初始化的空引用
  • 线程访问合规性问题:如果直接在非UI线程读取RichTextBox内容填充数组,会触发线程安全访问异常,要确保数组内容是通过UI线程调度正确读取后再传递给工作线程
  • 类型不匹配问题:从RichTextBox读取文本拆分生成数组时,要确认生成的是String()类型数组,避免因元素类型不匹配导致LINQ方法执行报错
  • 空值问题:检查数组元素是否存在Nothing值,如果存在未处理的空值,分组逻辑可能出现非预期结果
鲁棒性优化方案

可以给现有去重逻辑增加空值保护,避免因上游数据异常导致该段代码报错,优化后代码如下:

' 增加空集合兜底,避免空引用异常
Dim duplicates As List(Of String) =
    If(WithDuplicates, Enumerable.Empty(Of String)()) _
    .GroupBy(Function(n) n) _
    .Where(Function(g) g.Count() > 1) _
    .Select(Function(g) g.First()) _
    .ToList()
Dim DuplicatesOnly As String() = duplicates.ToArray()

优化后即使WithDuplicates未初始化、为空集合,代码也会返回空的重复元素数组,不会直接抛出运行时异常。

内容的提问来源于stack exchange,提问作者Seeloewen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:15:37