2017-05-06 52 views
1

我正在嘗試閱讀文本文件以比較其中的行與用戶輸入的程序。將一個字符串與文本文件中的一行進行比較並根據該文本行爲

目前,我得到它的工作在第一線的文件中

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

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

我想爲它時所讀的,等於用戶的輸入,然後執行的代碼行一個行的文件與該行文本相關。

是否可以讓程序將文本文件視爲切換列表?

如:

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

做個別行或整個內容? –

+0

@JamesHughes最好是:(命令,代碼),然後在下一行相同。 – mxr

+1

你可以遍歷你的命令數組,然後打開它?雖然我認爲Dictionary >可能更合適。 –

回答

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 
} 
+0

真的很麻煩,纏着我的頭。我將如何使用第二種方法實現命令? – mxr

+0

最簡單的方法是讓每個命令都與一個方法相關,並將它們用作你的'Func'條目。或者,你可以使用lambdas或匿名方法 –

+0

啊,我明白了。我已經設法通過將用戶輸入發送到執行相關操作的方法來創建所需的功能,並且還將其壓縮到切換列表中以使其更緊湊並且消除由於爲每個單獨的命令使用方法而導致的不必要的步驟。我試圖做的背後的主要目的是保持程序實際代碼之外的所有命令,使其更清潔,並通過在文本文件中創建新行來添加新命令更加容易。 – mxr

相關問題