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来存储所有结果。这样,您可以在函数完成后访问 List 并使用它来访问所有值。

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

我建议您将代码移动到它自己的函数中。通常我更喜欢让我的函数只做一件事以保持简单,但首先你可以把它变成这样的东西。

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 回答