2017-03-21 11 views
-1

私はテキストゲームを作っています。私はプレーヤーからの入力を取得する方法と、その入力を処理する方法の1つを持っています。ただし、プレイヤーがコマンドをすべて小文字で入力した場合にのみ機能します。私はそれを無視するようにしたい。大文字と小文字を区別しない解釈C#

 public string GetInput() 
    { 
     var Test = true; 

     while (Test) 
     { 
      response = Console.ReadLine(); 
      if (validWords.Contains(response)) 
      { 
       Test = false; 
       ProcessInput(response); 
      } 
      else 
      { 
       Console.WriteLine("I'm sorry, I do not understand."); 
      } 
     } 
     return response; 
    } 
public void ProcessInput(string response) 
    { 
     switch (response) 
     { //Switch statements for responses here 
     } 
    } 

私は私がここで見つけたいくつかの他の回答を使用してみましたが、それらはすべて、まだ小文字のみの入力で動作する(LINQを使用して、string.IndexOfは、/ etc /に等しいです。)。アイデア? Containsメソッドの2番目のパラメータとして文字列のケースを無視

+2

validWordsの内容は何ですか?これらがすべて小文字の文字列である場合は、ユーザー入力を小文字の単語に変換してから検索を実行してください。 IE _response = Console.ReadLine()。ToLower(); _ – Steve

+0

これらはすべて小文字です - ToLowerはどこに置くのですか? –

+0

入力を小文字に変換するだけです。それ以外の変更は必要ありません。 – Steve

答えて

3

使用string comparer

validWords.Contains(response, StringComparer.OrdinalIgnoreCase) 
+1

は、なぜあなたは使用しない(switchステートメント内の特定に) 'InvariantCultureIgnoreCase'は、より良い選択を序れていませんか? @Toshiが一致 – Toshi

+0

、序数比較器は、これは動作しますが、単に下部ケース(1つの操作)にコンソール入力を変換ほど効率的ではありませんより良い選択 –

1

変更テキストあなたは.ToLowerを使用して下げて()。

-1

あなたは現在、ユーザーの応答はあなたのvalidWordsリスト内に含まれているかどうかを確認するif (validWords.Contains(response))を使用しています。 (私は推測している)。これは、両方の大文字の文字列に対して検証

if (validWords.Where(w => w.ToUpper().Equals(response.ToUpper())).Count() == 1) 

:あなたは何ができるか

は、次のLINQの式を使用しています。

+1

あろう。あなたの解決策は、すべての有効な単語(コンソール入力で1回の操作+ validWordsでのn回の操作)でToUpper()を不必要に実行します。 –

2

以下のようにあなたは、readlineの後.ToLower()を追加することができます。コンソールから読み込ま

response = Console.ReadLine().ToLower();

すべてが小文字になります。

ToLowerメソッドの詳細についてはMSDN documentationをご覧ください。

また、特定の文化の入力を期待する場合は、次の質問も参照してください。string.ToLower() and string.ToLowerInvariant()

+1

ありがとう!これは私のために働いた - それがとても簡単だとは思わない。 –

1

ToLower()を使用して、すべての入力を小文字にすることができます。

例:

string response = Console.ReadLine().ToLower(); 
関連する問題