如何获取局部变量?
我有这段代码
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 ?
答案 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
}
}