我一直在编写一个程序,用于将学生数据(姓名和年龄)存储在.txt文件中。我现在正在做删除方法。但是,当用户输入一个字符串时,我希望它将输入与我List<string>
中的字符串进行比较,这些字符串充满了名称。代码:
string tempFileName;
string inputSel; // Selection string for delete
Console.WriteLine(" -- Deleting Grade {0} -- ", grade);
Console.WriteLine("- Enter a student name to delete: ");
foreach (string file in fileNames)
{
tempFileName = file.Replace(".txt", "");
studentNames.Add(tempFileName);
}
foreach (string name in studentNames)
{
Console.Write("{0}\n", name);
}
Console.WriteLine();
Console.Write("> ");
inputSel = Console.ReadLine();
string input = inputSel.ToLower();
string tempString;
bool foundString = false;
foreach (string file in studentNames)
{
tempString = file.ToLower();
if (inputSel == tempString)
{
foundString = true;
}
}
if (!foundString)
{
Console.WriteLine("Wrong name entered!");
Console.WriteLine("Returning to grades menu..");
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
return;
}
如您所见,程序将inputSel
存储到input
(ToLower()),然后比较studentNames List<string>
中的每个字符串,如果找到匹配项,则会翻转foundString bool
,但即使我输入一个匹配的名称(例如,它说JacobMusterson,我输入JacobMusterson,它应该跳过“找不到的学生”,但它不会。
答案 0 :(得分:3)
你应该使用输入而不是inputSel
if (input == tempString)
{
foundString = true;
}
因为行:
string input = inputSel.ToLower();
您要求输入较低版本的inputSel
我建议你在string中使用IngonreCase。比较没有制作ToLower()
var b = string.Compare("a","A",StringComparison.OrdinalIgnoreCase);
如果相等则返回0,请参阅here
编辑:
我会亲自使用:
var exists = studentNames.Any(x=>string.Compare(x,inputSel,StringComparison.OrdinalIgnoreCase)==0);
答案 1 :(得分:1)
你可以这样做:
Boolean foundString = studentNames.Exists(name => name.ToLower().Equals(input));
答案 2 :(得分:1)
为什么不简单地使用,
if(list.Contains(s)){
//found
}else{
//not found
}
其中 list 是 List<String>
而 s 是 String
答案 3 :(得分:0)
如果您使用Contains
的{{1}}方法,它将更具可读性和效果:
List
可以改写:
foreach (string file in studentNames)
{
tempString = file.ToLower();
if (inputSel == tempString)
{
foundString = true;
}
}
if (!foundString)
{
Console.WriteLine("Wrong name entered!");
Console.WriteLine("Returning to grades menu..");
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
return;
}
答案 4 :(得分:0)
只是对你的foreach循环的一个小评论。如果您已经发现字符串在集合中,那么您也总是遍历循环中的所有条目。
您可以通过替换最后一个foreach来提高代码的性能。
尝试:
bool foundString = studentNames.Select(file => file.ToLower()).Any(tempString => inputSel == tempString);