0

私は、あるテキストボックスから別のテキストボックスに単語を翻訳することになっているある種の辞書をいじっていますが、それは私が望むようには機能しません。ボタンのコードは次のとおりです。

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」でも機能しません。

4

4 に答える 4

6

が必要ですelse if。それ以外の場合は、次の場合にのみ 2 番目から発生します。

  if (textBox1.Text == item.word)
  {
     textBox2.Text = item.translation;
  }
  else if (textBox2.Text == item.translation)
  {
     textBox1.Text = item.word;
  }
  else
  {
     label3.Text = ("not found");
  }
于 2012-04-15T12:54:24.853 に答える
1

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

ELSE IF

于 2012-04-15T12:59:35.760 に答える
0

可能な場合はifステートメントを避けるのが最善だと思います。特に、elseやelseifは避けようとします。これは、従うべき条件が複数あると混乱するだけだからです。これは、何が起こっているのかを理解し、問題を解決するためのよりクリーンな方法である可能性があります。

        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");
        }

ifステートメントの1つがtrueの場合、他のロジックを実行したくないので(私の仮定)、foreachの残りのロジックをスキップして、次の項目に移動するだけです。

とにかくこれがループになっているのはなぜですか?最初の反復のテキストは、後続の反復によって上書きされませんか?

于 2012-04-15T13:36:47.763 に答える
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");
        }
    }
于 2012-04-15T13:10:49.927 に答える