局部变量C#

时间:2013-03-13 14:23:48

标签: c# asp.net

如何获取局部变量?

我有这段代码

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 个答案:

答案 0 :(得分: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 */

答案 1 :(得分:2)

将定义更改为将编译的内容: 您似乎只是试图粗体变量名称,它周围带着星号 - 我道歉。

如果你想在循环之外得到它,那么用c来定义它,如下所示:

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

然后就这样使用它:

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

如果您希望变量为global,则在类中定义它。假设类是这样的:

public class YourClass
{
    string resultado = null;
}

现在你不需要在其他地方定义它,只需在方法中使用它。

答案 2 :(得分: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);
    }
}

答案 3 :(得分: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
     }
}