2017-05-06 6 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

foreach (string command in commands) { switch (command) { case: //all your commands } } 

第2の方法は少し複雑ですが、はるかにエレガントではるかに伸縮:

第一の方法は、次のようになります個々の行またはコンテンツ全体として? –

+0

@JamesHughes好ましくは、(コマンド、コード)であり、次の行で同じである。 – mxr

+1

あなたはあなたのコマンド配列を繰り返し処理できますか? Dictionary >が適切かもしれません。 –

答えて

1

私はそれを理解する方法は、次の2つの主要なオプションがあります:あなたは、コマンドの所定のリストを持っている場合、好ましくは、お使いの配列を反復処理し、各個別のコマンドに切り替えますかDictionary<string,Func<T>>を使用できます。あなたは、各スイッチをオンにしますか

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

本当にこの周りに私の頭を包んで問題があります。 2番目の方法でコマンドを実装するには? – mxr

+0

最も簡単な方法は、各コマンドをメソッドに関連させ、これらを 'Func'エントリとして使用することです。代わりに、ラムダや匿名の方法を使用することができます –

+0

ああ、私は参照してください。私はすでに、関連するアクションを実行するメソッドにユーザー入力を送信することで、必要な機能を作成することができました。これをスイッチリストに圧縮して、よりコンパクトにし、個々のコマンドごとにメソッドを使用した。私がやろうとしていた主な目的は、プログラムの実際のコードの外にあるすべてのコマンドを清潔に保ち、テキストファイルに新しい行を作成するだけで簡単に新しいコマンドを追加できるようにすることでした。 – mxr

関連する問題