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
却找不到它,因为只有当你得到正确的资本化时,它才会比较相等。我主要是添加了这一部分作为建议:如果你认为它有用,你可以使用它;如果你不需要它,你可以继续使用你的。