1

どうすればローカル変数を取得できますか?

私はこのコードを持っています

if (ctrl is Control)
{
    Control c = (Control)ctrl;
    foreach (object innerCtrl in c.Controls)
    {
        if (innerCtrl is System.Web.UI.WebControls.CheckBox)
        if (((CheckBox)innerCtrl).Checked == true)
        {
            string resultado = (((CheckBox)innerCtrl).Text);
        }
        else
        {
            TextBox1.Text = "não";
        }
    }
}

変数resultadoを取得するにはどうすればよいですか?

4

4 に答える 4

10

この回答は、「変数を取得するにはどうすればよいですか」という意味について大きな仮定を立てています(すでに変数を持っています...)。

必要な任意のスコープで変数を宣言できます。

string resultado = null;
if (ctrl is Control)
{
    Control c = (Control)ctrl;
    foreach (object innerCtrl in c.Controls)
    {
        if (innerCtrl is System.Web.UI.WebControls.CheckBox)
        {
            if (((CheckBox)innerCtrl).Checked)
            {
                resultado = (((CheckBox)innerCtrl).Text);
            }
            else
            {
                TextBox1.Text = "não";
            }
        }
    }
}

if (resultado != null) /* use the variable */
于 2013-03-13T14:27:03.433 に答える
2

定義をコンパイルできるものに変更します。変数名を太字 にしようとしていたようで、その周りにアスタリスクが付いています。申し訳ありません。

ループの外でそれを取得したい場合は、次のように上記で定義しますc

Control c = (Control)ctrl;
string resultado = null;

その後、次のように使用します。

resultado = (((CheckBox)innerCtrl).Text);

変数をglobal使用する場合は、クラスで定義します。クラスが次のようなものであると想定します。

public class YourClass
{
    string resultado = null;
}

これで、他の場所で定義する必要はなく、メソッドで使用するだけです。

于 2013-03-13T14:25:00.077 に答える
2

複数の結果が得られる可能性があると仮定します。リストを使用してすべての結果を保存することをお勧めします。このようにして、関数が完了した後にリストにアクセスし、それを使用してすべての値にアクセスできます。

List<String> results = new List<String>;

if (ctrl is Control)
{
    Control c = (Control)ctrl;
    foreach (object innerCtrl in c.Controls)
    {
        if (innerCtrl is System.Web.UI.WebControls.CheckBox)
            if (((CheckBox)innerCtrl).Checked == true)
            {
                string resultado = (((CheckBox)innerCtrl).Text);
                if (!String.IsNullOrEmpty(resultado))
                    results.Add(resultado);
            }
            else
            {
                TextBox1.Text = "não";
            }
    }
}

if (results.Count > 0)
{
    // We got results. Do something with our results.
    foreach (var result in results)
    {
        Console.Write(results);
    }
}

コードを独自の関数に移動することをお勧めします。通常は、関数を単純にするために 1 つのことだけを行うようにしますが、最初は、このようなものに変えることもできます。

public List<String> FetchTextFromCheckBoxes(Control cntrl)
{
    List<String> results = new List<String>();

    if (ctrl is Control)
    {
        Control c = (Control)ctrl;
        foreach (object innerCtrl in c.Controls)
        {
            if (innerCtrl is System.Web.UI.WebControls.CheckBox)
                if (((CheckBox)innerCtrl).Checked == true)
                {
                    string resultado = (((CheckBox)innerCtrl).Text);
                    if (!String.IsNullOrEmpty(resultado))
                        results.Add(resultado);
                }
                else
                {
                    TextBox1.Text = "não";
                }
        }
    }

    return results;
}

次に、アプリケーションの主要部分でこのように使用するだけです。

List<String> results = FetchTextFromCheckBoxes(ctrl);

if (results.Count > 0)
{
    // We got results. Do something with our results.
    foreach (var result in results)
    {
        Console.Write(results);
    }
}
于 2013-03-13T14:29:04.287 に答える
0

コード内の実際の可視性スコープに関係なく、メソッド内のローカル変数は常にコンパイラによってスコープの最上位で宣言されることを考慮してください。ifしたがって、次のように変数をステートメントの外に移動しても、パフォーマンスやメモリに影響はありません。

foreach (object innerCtrl in c.Controls)
{
     if (innerCtrl is System.Web.UI.WebControls.CheckBox) {

        string resultado = string.Empty;
        if (((CheckBox)innerCtrl).Checked)
        {
             resultado = (((CheckBox)innerCtrl).Text);
        }
        else
        {
           TextBox1.Text = "não";
        }

        //CAN READ variable here
     }
}
于 2013-03-13T14:29:54.160 に答える