C# 列表比较不起作用

C# 列表比较不起作用,c#,C#,我正在尝试制作一个应用程序,它读取两个文本文件,将它们合并到一个列表中。然后将所述列表与另一个列表(来自另一个文本文件)进行比较。问题是,无论我做什么,我的程序总是转到else(请参见其中的一行) if (BoysAndGirlsList.Contains(NameEntered) && MostPopularNamesList.Contains(NameEntered)) )。我不知道为什么会这样 using System; using System.Collections.

我正在尝试制作一个应用程序,它读取两个文本文件,将它们合并到一个列表中。然后将所述列表与另一个列表(来自另一个文本文件)进行比较。问题是,无论我做什么,我的程序总是转到
else
(请参见其中的一行)

if (BoysAndGirlsList.Contains(NameEntered) && MostPopularNamesList.Contains(NameEntered))
)。我不知道为什么会这样

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Linq; //Needed for concat.

namespace Name_Search
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string BoyNames = System.IO.File.ReadAllText(@"D:\Google Drive\Course Work\C# Intro\Student Sample Programs\Chap07\BoyNames.txt"); //Reads BoyNames txt file.
            List<string> BoyNamesList = BoyNames.Split('\n').ToList(); //Converts it to a list.
            //BoyNamesList.ForEach(Console.WriteLine); <-Testing to make sure that the list is working properly.

            string GirlNames = System.IO.File.ReadAllText(@"D:\Google Drive\Course Work\C# Intro\Student Sample Programs\Chap07\GirlNames.txt"); //Reads GirlNames txt file.
            List<string> GirlNamesList = GirlNames.Split('\n').ToList(); //Converts it to a list.

            List<string> BoysAndGirlsList;

            BoysAndGirlsList = BoyNamesList.Concat(GirlNamesList).ToList(); //Adds the lists together.
            //BoysAndGirlsList.ForEach(Console.WriteLine); <-Again just testing that the list is working.

            string MostPopularNames = System.IO.File.ReadAllText(@"D:\Google Drive\Course Work\C# Intro\Student Sample Programs\Chap07\MostPopularBoyAndGirlNames.txt"); //Reads MostPopularBoyAndGirlNames txt file. Compiled from http://goo.gl/1crLcY.)
            List<string> MostPopularNamesList = MostPopularNames.Split('\n').ToList(); //Converts it to a list.

            string NameEntered = nameInput.Text;

            if (BoysAndGirlsList.Contains(NameEntered) && MostPopularNamesList.Contains(NameEntered))
            {
                MessageBox.Show("This name is one the most popular names!");
            }
            else
            {
                MessageBox.Show("This is not one of the most popular names.");
            }

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.IO;
使用System.Linq//康卡特需要。
名称空间名称搜索
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
字符串BoyNames=System.IO.File.ReadAllText(@“D:\Google Drive\Course Work\C#Intro\Student Sample Programs\Chap07\BoyNames.txt”);//读取BoyNames txt文件。
List BoyNamesList=BoyNames.Split('\n').ToList();//将其转换为列表。

//BoyNamesList.ForEach(Console.WriteLine);该问题可能已如注释所述解决,其中“名称”中的冗余空格会导致它们之间的比较不平等。如果要以不区分大小写的方式比较名称,也会出现问题

第一个问题可以通过删除每个名称的空白来解决:

BoysAndGirlsList = BoysAndGirlsList.Select(name => name.Trim()).ToList();
MostPopularNamesList = MostPopularNamesList.Select(name => name.Trim()).ToList();
第二个问题可以通过使用不变大小写比较器来解决:

if (BoysAndGirlsList.Contains(NameEntered, StringComparer.InvariantCultureIgnoreCase) && 
    MostPopularNamesList.Contains(NameEntered, StringComparer.InvariantCultureIgnoreCase))

首先,您应该调试程序并检查列表是否确实包含您输入的名称。请注意,任何额外的空格都会阻止检查成功。@我在前面测试时(检查控制台输出)会想到这一点我确实注意到一些控制台空白。我如何确保不会发生这种情况?@Nitsha:您可以调用
.Trim()
在字符串上删除前导空格和尾随空格。您可以修剪输入和列表中的项目。一个简单的解释可能是,文件有Windows换行符,因此按
\n
拆分将不会删除
\r
。删除空格效果很好,但新的if语句有什么不同?我检查了如果我的if语句起作用,它确实起作用。@Nitsha它使用不变大小写进行比较,这样,如果用户在文本框中键入“Nitsha”,它就会找到“Nitsha”在列表中,而你原来的
if
却找不到它,因为只有当你得到正确的资本化时,它才会比较相等。我主要是添加了这一部分作为建议:如果你认为它有用,你可以使用它;如果你不需要它,你可以继续使用你的