检查列表C中是否存在字符串#

时间:2013-10-30 07:45:31

标签: c# list foreach

我一直在编写一个程序,用于将学生数据(姓名和年龄)存储在.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,它应该跳过“找不到的学生”,但它不会。

5 个答案:

答案 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);