2012-04-15 14 views
0

ある種の辞書をつぶしている、つまりあるテキストボックスから他のテキストボックスに単語を翻訳するはずですが、それ以外の方法では動作しません。それが好きです。ボタンのコードは次のとおりです。"if"が真であっても "else"が完了する

private void button1_Click(object sender, EventArgs e) 
    { 
     string[] lines = File.ReadAllLines("C:/words.txt"); 
     int i = 0; 
     var items = from line in lines 
        where i++ != 0 
        let words = line.Split('|') 
        where words.Count() > 1 
        select new 
        { 
         word = words[0], 
         translation = words[1] 
        }; 

     foreach (var item in items) 
     { 
      if (textBox1.Text == item.word) 
      { 
       textBox2.Text = item.translation; 
      } 
      if (textBox2.Text == item.translation) 
      { 
       textBox1.Text = item.word; 
      } 
      else 
      { 
       label3.Text = ("not found"); 
      } 
     } 
    } 

編集:「else if」のどちらでも動作しません。

+0

あなたの質問には、使用している言語でタグを付ける必要があります。 – assylias

+0

ようこそ。どの言語を使用するかを指定すると、役立ちます。タグ「分割」と「翻訳」は適切ではないようです。 – dgw

答えて

0

可能な限り文を避けるのが最善の方法ですが、特にelseとelseを避けるようにしてください。この理由は、試して実行する条件が複数ある場合に混乱するだけです。ここでは、何が起こっているのかを理解し、問題を解決するための、よりクリーンな方法です。

 foreach (var item in items) 
     { 
      if (textBox1.Text == item.word) 
      { 
       textBox2.Text = item.translation; 
       continue; // Don't process anything else in this loop. 
      } 
      if (textBox2.Text == item.translation) 
      { 
       textBox1.Text = item.word; 
       continue; // Don't process anything else in this loop. 
      } 
      label3.Text = ("not found"); 
     } 

文が真であるならば、私たち、私たちは単にを使うの一つは、foreachの中のロジックの残りの部分をスキップしてに移動しを続けるならば、我々は(私の仮定)を実行するために、他のロジックをしたくないので、次の項目。

これはなぜループ内にあるのですか?最初の反復のテキストは、それ以降の反復によって上書きされませんか?

+0

ループとしてはどうしたらいいですか?それでも動作しません。 –

+0

@MétéBurján何が正しく動作しないのですか?あなたはいつも "見つからない"と思っていますか?これは、このシナリオではアイテムの最後のアイテムを常に分析しているため、常に「見つからない」状態になる可能性があるためです。ヒットした後で停止したい場合は、* continue *ステートメントを* breakステートメントに置き換えてください。このようなループはあまり意味をなさないが、これはあなたの主な問題となる可能性がある。 –

+0

はい、翻訳が見つかったとしても、常に「見つからない」と書いています。私も "ブレーク"しようとしたが、どちらもうまくいきませんでした。どういうわけか最後の行で止めるべきですか? –

6

あなたは、そうでない場合、他にのみ秒から起こっている、else ifが必要です

if (textBox1.Text == item.word) 
    { 
    textBox2.Text = item.translation; 
    } 
    else if (textBox2.Text == item.translation) 
    { 
    textBox1.Text = item.word; 
    } 
    else 
    { 
    label3.Text = ("not found"); 
    } 
+2

'elseif'の代わりに' else if'であってはなりませんか? – gdoron

+0

申し訳ありませんが、C#プログラマーではありません。しかし、はい、あなたは正しいです。 – Menztrual

+0

私はそれを以前に試みましたが、まだそれを書いています。 –

1

else if (textBox2.Text == item.translation)の代わりif (textBox2.Text == item.translation)を使用してみてください。

ELSE IF

0

私には分かりませんが、最初のifがtrueの場合にのみ2番目のifが動作することがわかります。これを試してください:

foreach (var item in items) 
    { 
     if (textBox1.Text = item.word) 
     { 
      textBox2.Text = item.translation; 
     } 

     else if (textBox2.Text = item.translation) 
     { 
      textBox1.Text = item.word; 
     } 
     else 
     { 
      label3.Text = ("not found"); 
     } 
    } 
関連する問題