局部变量C#
我怎样才能得到一个局部变量?局部变量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?
更改定义的东西,将编译:
看来,你只是试图大胆变量的名称和它与周围星号掉了 - 我的道歉。
如果你想它来获得外循环,然后用c
这样定义它上面:
Control c = (Control)ctrl;
string resultado = null;
,然后只用它以后是这样的:
resultado = (((CheckBox)innerCtrl).Text);
,如果你想要变量为global
然后在类中定义它。假设类是这样的:
public class YourClass
{
string resultado = null;
}
,现在你不需要其他地方定义它,只是使用它的方法。
我想获得局部变量并使其成为全局... 我想将结果保存到控制按钮 – Pedro 2013-03-13 14:28:07
@Pedro,请参阅我的编辑。 – 2013-03-13 14:30:17
这个答案对你的意思做了巨大的假设,“我怎样才能得到变量”(你已经有变量...)。
你可以声明在任何范围的变量,你需要它:
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 */
假设你可能会得到多个结果。我会建议使用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,或许在OP使用复选框的情况下更可能的解决方案。 – user7116 2013-03-13 14:31:13
考虑的是,在方法的局部变量总是宣布的范围由编译器顶部,无论在代码中真正知名度范围。因此,在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
}
}
我有点怀疑OP是否担心在if语句中声明变量的性能:) – user7116 2013-03-13 14:32:38
您希望得到它的位置? – MarcinJuraszek 2013-03-13 14:24:23
请发布此代码所属的方法以及您想要检索它的位置。 – DGibbs 2013-03-13 14:24:59
请不要写'== true'。 – Ryan 2013-03-13 14:27:13