【问题标题】:Comparing a string to a line in a text file and act based on it将字符串与文本文件中的一行进行比较并根据它进行操作
【发布时间】:2017-05-07 01:54:44
【问题描述】:

我正在尝试编写一个读取文本文件以将其中的行与用户输入进行比较的程序。

目前我让它在文件的第一行工作

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

        if (input.ToLower().Equals(commands))
        {
            Environment.Exit(0);
        }

我希望它读取文件中与用户输入相同的行,然后执行与该文本行相关的代码行。

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

如:

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

【问题讨论】:

  • 您是要打开每一行还是整个内容?
  • @JamesHughes 最好是:(命令,代码),然后在下一行相同。
  • 你能遍历你的命令数组,然后打开它吗?虽然我认为 Dictionary> 可能更合适。
  • @JamesHughes 可以让字典自动使用文本文件中给出的数据创建一个新条目吗?
  • 是的,但如果谓词尚不存在,您必须使用Reflection 动态定义新函数。否则,如果它确实存在,那将是相当微不足道的。

标签: c#


【解决方案1】:

按照我的理解,您有两个主要选择:遍历您的数组,然后打开每个单独的命令,或者,如果您有预先确定的命令列表,您可以使用Dictionary<string,Func<T>>

第一种方法看起来像这样:

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
}

【讨论】:

  • 真的很难理解这个问题。如何使用第二种方法实现命令?
  • 最简单的方法是让每个命令与一个方法相关,并将它们用作您的Func 条目。或者,您可以使用 lambdas 或匿名方法
  • 啊,我明白了。我已经设法通过将用户输入发送到执行相关操作的方法来创建所需的功能,并将其压缩到开关列表中以使其更紧凑并删除因使用每个单独命令的方法而导致的不必要步骤.我试图做的主要目的是将所有命令保留在程序的实际代码之外,以保持程序更简洁,并通过在文本文件中创建一个新行来更轻松地添加新命令。
  • 那么你可能只想遍历你的命令列表。
  • 我将放弃文本文件,将所有命令放在开关列表中的一行。无论如何,为你的帮助干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2019-03-26
  • 2022-01-06
  • 1970-01-01
相关资源
最近更新 更多