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

C#如何查询文本文件填充的ListBox中是否包含用户输入的字符串

问题根因

ListBox.Items集合存储的元素是object类型,你直接用==比较时,默认执行的是引用相等校验,而非字符串内容的相等校验,所以即使两边文本内容完全一致,也会返回false。

修复方案

方案1:修改循环内的比较逻辑(最直接)

将取出的列表项显式转为字符串,再做内容比较,同时可以添加Trim()处理首尾空白、忽略大小写等逻辑,避免输入/文件读取时的多余空格、大小写差异导致匹配失败。
修改后的按钮点击代码如下:

private void boyButton_Click(object sender, EventArgs e)
{
    string boyname = boyBox2.Text.Trim();
    bool found = false;
    for(int n = 0; n < boyBox.Items.Count; n++)
    {
        // 显式转字符串,忽略大小写+去除首尾空格后比较
        if (boyBox.Items[n].ToString().Trim().Equals(boyname, StringComparison.OrdinalIgnoreCase))
        {
            found = true;
            break;
        }
    }

    if (found)
        MessageBox.Show("popular");
    else
        MessageBox.Show("not popular");
}

方案2:用LINQ简化代码

如果项目已经引用System.Linq,可以直接用Any方法简化判断逻辑:

using System.Linq; // 需先在文件头部引入命名空间

private void boyButton_Click(object sender, EventArgs e)
{
    string boyname = boyBox2.Text.Trim();
    bool found = boyBox.Items.Cast<object>()
        .Any(item => item.ToString().Trim().Equals(boyname, StringComparison.OrdinalIgnoreCase));
    
    MessageBox.Show(found ? "popular" : "not popular");
}

方案3:使用ListBox内置匹配方法

ListBox自带FindStringExact方法可以直接精准匹配内容:

private void boyButton_Click(object sender, EventArgs e)
{
    int index = boyBox.FindStringExact(boyBox2.Text.Trim());
    MessageBox.Show(index != ListBox.NoMatches ? "popular" : "not popular");
}

额外优化建议

如果同时需要多次做名字校验,可以在读取文件时就把名字存到一个List<string>全局变量里,后续校验直接查内存中的列表即可,不用每次都遍历ListBox的Items集合,性能更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:05