簡體   English   中英

局部變量C#

[英]Local Variable C#

如何獲取局部變量?

我有這個代碼

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

這個答案對“我如何獲得變量”(您已經有了變量...)的含義做出了巨大假設。

您可以在所需的任何范圍內聲明變量:

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 */

將定義更改為可以編譯的內容: 看來您只是在嘗試將變量名加粗 ,並且在它的周圍帶有星號-我很抱歉。

如果要在循環之外獲取它,則可以在上面用c定義它,如下所示:

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

然后像下面這樣使用它:

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

如果您希望變量是global變量,則在類中對其進行定義。 假設該類是這樣的:

public class YourClass
{
    string resultado = null;
}

現在您無需在其他任何地方定義它,只需在方法中使用它即可。

假設您可能會得到多個結果。 我建議使用列表存儲所有結果。 這樣,您可以在函數完成后訪問列表,並使用該列表來訪問所有值。

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

考慮到方法中的局部變量總是由編譯器在作用域的頂部聲明,無論代碼中的實際可見性作用域如何。 因此,將變量移出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
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM