列表比较不起作用

时间:2015-11-08 21:27:34

标签: c#

我正在尝试创建一个读取两个文本文件的应用程序,将两个文本文件合并为一个列表。然后获取所述列表,并将其与另一个列表(来自另一个文本文件)进行比较。问题在于,无论我做什么,我的程序总是转到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.");
            }

        }
    }
}

这里什么不能正常工作?我试过休息一下,当我这样做时,价值观对我来说很好。

1 个答案:

答案 0 :(得分:0)

这个问题可能正如评论中所提到的那样解决了,其中“名称”中的多余空格也是如此。导致他们不平等地比较。如果要以不区分大小写的方式比较名称,也会出现问题。

第一个问题可以通过修剪每个名称的空格来解决:

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))