string - 检查列表框中的项目忽略大小写

标签 string vb.net listbox case-insensitive

一些旨在将电子邮件别名添加到列表框的代码存在问题。我有一个内置的检查,以确保您尝试添加的项目不在列表中,但是当我不希望它出现时,检查区分大小写。我不知道如何让它忽略这种情况......这是我的代码:

Dim ItemToAdd as String = ""

ItemtoAdd = tbxItemtoAdd.Text + "@emaildomain.co.uk"

If Not lbxEmailAliases.Items.Contains(ItemtoAdd) Then
    lbxEmailAliases.Items.Add(ItemtoAdd)
End If

目前,如果列表框包含 johnsmith24 @emaildomain.co.uk 并且您尝试添加 Johnsmith24 (大写 J),它将成功添加,但我不希望它这样做。我如何让它忽略大小写?

我已经尝试将 lbxEmailAliases.Items.Contains(ItemtoAdd) 更改为 lbxEmailAliases.Items.Contains(ItemtoAdd, StringComparison.CurrentCultureIgnoreCase) 但它对此并不满意,因为有太多参数,它只需要一个。

请问有什么想法吗?

最佳答案

如果这是一个标准的 WinForm ListBox 控件,那么如果不循环遍历所有项目并单独检查每个项目,就无法做到这一点。例如:

Dim found As Boolean = False
For Each item As Object In ListBox1.Items
    found = item.ToString().Equals(ItemToAdd, StringComparison.CurrentCultureIgnoreCase)
    If found Then
        Exit For
    End If
Next
If found Then
    lbxEmailAliases.Items.Add(ItemtoAdd)
End If

但是,如果您对 LINQ 感到满意,则可以像这样更简洁地进行操作:
If ListBox1.Items.OfType(Of String).Any(Function(item) item.Equals(ItemToAdd, StringComparison.CurrentCultureIgnoreCase)) Then
    lbxEmailAliases.Items.Add(ItemtoAdd)
End If

或者,正如 Andy G 指出的那样,LINQ Contains 方法更容易,因为它接受 IEqualityComparer 和框架提供的支持不区分大小写字符串比较的股票:
If ListBox1.Items.OfType(Of String).Contains(ItemToAdd, StringComparer.CurrentCultureIgnoreCase) Then
    lbxEmailAliases.Items.Add(ItemtoAdd)
End If

关于string - 检查列表框中的项目忽略大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793961/

相关文章:

java - 在Java中将资源文本文件读取为字符串

Javascript - 如何在函数中使用变量

mysql - 数据读取过程中遇到 fatal error

.net - 如何通过反射获取某个 ValueType 的 MinValue/MaxValue?

powershell - Powershell:使用foreach和listbox时输出奇数

wpf - 具有自动高度的网格行中的列表框。滚动条不工作

ios - 将字符串从一个 View Controller 传递到另一个 Tabbar Controller

python - 为什么第一个制表符 (\t) 与其他制表符不一致?

html - IE 复制服务器端中断 <br>

javascript - 使用 javascript 从列表框中删除(取消选择)所选项目