ASP.NET中的局部变量太多

ASP.NET中的局部变量太多,asp.net,Asp.net,我编写了一个控件,并使用工具进行代码分析。有一次考试我没有通过。避免过多的本地人 在我的CreateChildControls函数中,我构建了一个包含大量字段的大表。我需要创建很多TableRow和TableCell来构造表。但这些不是控制的字段或属性。函数中的局部变量是动态创建的 我应该将这些TableCell和TableRows作为控件字段吗?或者我只是把它们作为本地变量保存在CreateChildControl函数中 诚挚的问候, < P>首先,我建议你考虑使用控件,而不是动态地在后端代码

我编写了一个控件,并使用工具进行代码分析。有一次考试我没有通过。避免过多的本地人

在我的CreateChildControls函数中,我构建了一个包含大量字段的大表。我需要创建很多TableRow和TableCell来构造表。但这些不是控制的字段或属性。函数中的局部变量是动态创建的

我应该将这些TableCell和TableRows作为控件字段吗?或者我只是把它们作为本地变量保存在CreateChildControl函数中


诚挚的问候,

< P>首先,我建议你考虑使用控件,而不是动态地在后端代码中创建大量的行和单元格。通过使用
转发器
,您可以更轻松地修改实际的标记,而无需经过数百行代码才能找到它

但是如果这不是一个选项,那么考虑一下这个问题:你真的需要每个变量都有一个唯一的变量吗?你能改为这样做吗:

TableRow tr;
TableCell tc;

tr = new TableRow();
tc = new TableCell();
tc.Text = "whatever";
tr.Cells.Add(tc);
table.Rows.Add(tr);

tr = new TableRow();
tc = new TableCell();
tc.Text = "whatever # 2";
tr.Cells.Add(tc);
table.Rows.Add(tr);

即,为多个行/单元重用相同的变量。

< P>首先,我建议您考虑使用控件,而不是在后端代码中动态创建大量行和单元格。通过使用
转发器
,您可以更轻松地修改实际的标记,而无需经过数百行代码才能找到它

但是如果这不是一个选项,那么考虑一下这个问题:你真的需要每个变量都有一个唯一的变量吗?你能改为这样做吗:

TableRow tr;
TableCell tc;

tr = new TableRow();
tc = new TableCell();
tc.Text = "whatever";
tr.Cells.Add(tc);
table.Rows.Add(tr);

tr = new TableRow();
tc = new TableCell();
tc.Text = "whatever # 2";
tr.Cells.Add(tc);
table.Rows.Add(tr);

也就是说,对多个行/单元格重复使用同一变量。

代码分析规则应始终用作指导原则-如果您对违反规则的解决方案感到满意,请添加一个异常并继续处理更难的问题

也就是说,消除局部变量通常与提取方法(以及类,如果合适)以实现所需逻辑一样容易。在您的情况下,您可能有一个方法来构造一个
TableRow
,它调用其他方法来构造每个
TableCell
。这样做的另一个好处是使
CreateChildControls
方法更易于阅读和测试


更新:要回答您关于将变量升级为字段的问题,我建议避免使用字段,除非它们是绝对必要的。在这种情况下,它们似乎不是,因此您最好在相关方法中将它们保持为本地的。

应始终使用代码分析规则作为指导原则-如果您对违反规则的解决方案感到满意,请添加一个异常,然后继续解决更难的问题

也就是说,消除局部变量通常与提取方法(以及类,如果合适)以实现所需逻辑一样容易。在您的情况下,您可能有一个方法来构造一个
TableRow
,它调用其他方法来构造每个
TableCell
。这样做的另一个好处是使
CreateChildControls
方法更易于阅读和测试


更新:要回答您关于将变量升级为字段的问题,我建议避免使用字段,除非它们是绝对必要的。在这种情况下,它们似乎不是,因此您最好在相关方法中将它们作为局部变量保留。

在大多数情况下,我认为重用的局部变量通常有糟糕的名称,如tr和tc,与具有更好名称的额外局部变量(如whateverRow和anotherRow)相比,代码的可读性要低得多。@dahlbyk:这也可能是真的。老实说,我打算把我的答案留在“改用
转发器”
,从长远来看,这可能是更好的建议。我不需要使用转发器。因为表就像一个表单,不是用来显示数据的。在大多数情况下,我认为重用的局部变量(通常有糟糕的名称,如tr和tc)比额外的局部变量(具有更好的名称,如whateverRow和anotherRow)的可读性要低得多。@dahlbyk:这也可能是真的。老实说,我打算把我的答案留在“改用
转发器”
,从长远来看,这可能是更好的建议。我不需要使用转发器。因为该表类似于一个表单,不用于显示数据。代码类似于下面的@codeka粘贴。但是我不重用局部变量。代码就像下面的@codeka粘贴一样。但我不重用局部变量。