2013-03-13 94 views
1

我怎样才能得到一个局部变量?局部变量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

+12

您希望得到它的位置? – MarcinJuraszek 2013-03-13 14:24:23

+0

请发布此代码所属的方法以及您想要检索它的位置。 – DGibbs 2013-03-13 14:24:59

+4

请不要写'== true'。 – Ryan 2013-03-13 14:27:13

回答

2

更改定义的东西,将编译: 看来,你只是试图大胆变量的名称和它与周围星号掉了 - 我的道歉。

如果你想它来获得外循环,然后用c这样定义它上面:

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

,然后只用它以后是这样的:

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

,如果你想要变量为global然后在类中定义它。假设类是这样的:

public class YourClass 
{ 
    string resultado = null; 
} 

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

+0

我想获得局部变量并使其成为全局... 我想将结果保存到控制按钮 – Pedro 2013-03-13 14:28:07

+0

@Pedro,请参阅我的编辑。 – 2013-03-13 14:30:17

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

假设你可能会得到多个结果。我会建议使用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); 
    } 
} 
+1

+1,或许在OP使用复选框的情况下更可能的解决方案。 – user7116 2013-03-13 14:31:13

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 
    } 
} 
+2

我有点怀疑OP是否担心在if语句中声明变量的性能:) – user7116 2013-03-13 14:32:38