C# 将字符串与文本文件中的行进行比较并根据其进行操作

C# 将字符串与文本文件中的行进行比较并根据其进行操作,c#,C#,我正在努力完善一个程序,它读取一个文本文件,将其中的行与用户输入进行比较 目前,我在文件的第一行使用它 string input = Console.ReadLine(); string[] commands = File.ReadAllLines(@"commands.txt"); if (input.ToLower().Equals(commands)) { Environment.Exit(0); } 我想让它读取

我正在努力完善一个程序,它读取一个文本文件,将其中的行与用户输入进行比较

目前,我在文件的第一行使用它

string input = Console.ReadLine();
string[] commands = File.ReadAllLines(@"commands.txt");

        if (input.ToLower().Equals(commands))
        {
            Environment.Exit(0);
        }
我想让它读取文件中与用户输入相等的一行,然后执行与该行文本相关的一行代码

是否可以让程序将文本文件视为切换列表

例如:

switch (input)
{
*read from file*:
}

按照我的理解,您有两个主要选项:迭代数组,然后打开每个单独的命令;或者,如果您有预先确定的命令列表,最好使用
字典

第一种方法如下所示:

foreach (string command in commands)
{
     switch (command)
     {
          case: //all your commands
     }
}
第二种方法更复杂,但更优雅,更具可扩展性:

Dictionary<string,Func<T>> commandPredicates = new Dictionary<string,Func<T>>(); //Create your dictionary.
commandPredicates.Add(myCommand,myAssociatedFunctionOrLambda); //Define your predicates
foreach (string command in commands)
{
    commandPredicates[command].Invoke(args); //Execute the commands
}
Dictionary commandPredicates=new Dictionary()//创建字典。
Add(myCommand、myAssociatedFunctionOrLambda)//定义谓词
foreach(命令中的字符串命令)
{
commandPredicates[command].Invoke(args);//执行命令
}

您想切换每一行还是整个内容?@JamesHughes最好是:(command,code)然后切换到下一行。您能迭代一下您的命令数组,然后再切换吗?虽然我认为字典可能更合适。@JamesHughes字典可以自动创建一个新条目,其中包含文本文件中给出的数据吗?可以,但是如果谓词不存在,您必须使用
反射
动态定义新函数。否则,如果它总是存在的话,那将是相当琐碎的事情。我真的很难理解这一点。如何使用第二种方法实现命令?最简单的方法是将每个命令与一个方法关联,并将其用作
Func
条目。或者你可以使用lambdas或匿名方法,我明白了。通过将用户输入发送到执行相关操作的方法,我已经成功地创建了所需的功能,并且还将其压缩到一个开关列表中,以使其更加紧凑,并删除了对每个命令使用方法所导致的不必要步骤。我试图做的主要目的是将所有命令保留在程序的实际代码之外,以保持程序更干净,并通过在文本文件中创建新行来更轻松地添加新命令。然后,您可能只想在命令列表中进行迭代。我将丢弃文本文件,为所有命令指定一个开关列表中的行。无论如何,为你的帮助干杯。