-2

ジェネリックリストをプライベートヘルパーメソッドに入れました...

    private void addButton()
    {
        List<Button> buttonList = new List<Button>();

        buttonList.Add(button1);
        buttonList.Add(button2);
        buttonList.Add(button3);
        buttonList.Add(button4);
        buttonList.Add(button5);
        buttonList.Add(button6);
        buttonList.Add(button7);
        buttonList.Add(button8);
        buttonList.Add(button9); 
    }

私はあなたがこのようなことをしなければならないこのメソッドを呼び出すことを知っています...

    private void button1_Click(object sender, EventArgs e)
    {
            addButton();

            foreach (button in addButton())
            {
                button.Enabled = false;
            }
    }

ただし...addButton()でボタンを呼び出そうとすると、「ボタン」の下に赤い線が表示され、見つからなかったことを示します。誰か助けてもらえますか:)

4

3 に答える 3

4

メソッドはリストを返す必要があります:

private List<Button> addButton()
{
    List<Button> buttonList = new List<Button>();

    buttonList.Add(button1);
    //...
    return buttonList;
}

また、最初のものは必要ありませんaddButton();

private void button1_Click(object sender, EventArgs e)
{
        foreach (Button button in addButton())
        {
            button.Enabled = false;
        }
}

そして、私はこのメソッドをyieldキーワードで書き直してもらいます:

private IEnumerable<Button> addButton()
{
    yield return button1;
    yield return button2;
    //...
    yield return button9;
}

必要なときにボタンを通過するためだけにボタンのリストを作成する必要がないためです。それらを列挙するだけで十分です。


また、メソッド(C#プログラミングガイド)の、値を返すメソッドに関するセクションも確認してください。

メソッドは、呼び出し元に値を返すことができます。メソッド名の前にリストされているタイプであるreturntypeがvoidでない場合、メソッドはreturnキーワードを使用して値を返すことができます。キーワードreturnの後にreturnタイプに一致する値が続くステートメントは、その値をメソッド呼び出し元に返します。returnキーワードは、メソッドの実行も停止します。returnタイプがvoidの場合でも、値のないreturnステートメントは、メソッドの実行を停止するのに役立ちます。returnキーワードがないと、メソッドはコードブロックの最後に到達したときに実行を停止します。値を返すためにreturnキーワードを使用するには、void以外のreturn型のメソッドが必要です。


PS:このジェネリックリストを短縮するにはどうすればよいですか?。おそらくこれはまだより良いアプローチでしょうか?

于 2013-01-24T01:13:59.520 に答える
0

コードを次のように変更します。

private List<Button> addButton()
{
    List<Button> buttonList = new List<Button>();

    buttonList.Add(button1);
    buttonList.Add(button2);
    buttonList.Add(button3);
    buttonList.Add(button4);
    buttonList.Add(button5);
    buttonList.Add(button6);
    buttonList.Add(button7);
    buttonList.Add(button8);
    buttonList.Add(button9); 

    return buttonList;
}


private void button1_Click(object sender, EventArgs e)
{
     foreach (var button in addButton())
     {
          button.Enabled = false;
     }
}
于 2013-01-24T01:15:17.883 に答える
0

このように使用してください-

    List<Button> buttonList;
    private List<Button> addButton()
    {
        buttonList = new List<Button>();

        buttonList.Add(button1);
        buttonList.Add(button2);
        buttonList.Add(button3);
        buttonList.Add(button4);
        buttonList.Add(button5);
        buttonList.Add(button6);
        buttonList.Add(button7);
        buttonList.Add(button8);
        buttonList.Add(button9);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        addButton();

        foreach (button in buttonList)
        {
            button.Enabled = false;
        }
    }
于 2013-01-24T01:15:33.887 に答える