我编写了一个控件,并使用工具进行代码分析。有一个测试,我没有通过。避免过多的本地人,http://msdn.microsoft.com/library/ms182263(VS.90).aspx。
在我的CreateChildControls函数中,我构建了一个包含大量字段的大表。我需要创建很多TableRow和TableCell来构造表。但这些不是控制领域或属性。 Thery是函数中的局部变量,它们是动态创建的。
我应该将这些TableCells和TableRows作为控件的字段吗?或者我只是将它们作为CreateChildControl函数中的局部变量?
最诚挚的问候,
答案 0 :(得分:1)
首先,我建议您考虑使用Repeater控件,而不是在后端代码中动态创建大量行和单元格。通过使用Repeater
,您可以更轻松地修改实际标记,而无需通过数百行代码来查找它。
但是,如果这不是一个选项,那么请考虑以下问题:您是否真的需要为每个变量添加唯一变量?你能不能做这样的事情:
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);
即,为多行/单元重用相同的变量。
答案 1 :(得分:0)
代码分析规则应始终用作指南 - 如果您对违反规则的解决方案感到满意,请添加例外并继续处理更难的问题。
也就是说,消除局部变量通常就像提取方法(以及适当的类)一样简单,以实现所需的逻辑。在您的情况下,您可能有一种方法来构造TableRow
,该方法调用其他方法来构造每个TableCell
。这样做的另一个好处是使您的CreateChildControls
方法更易于阅读和测试。
更新:要回答有关将变量提升为字段的问题,我建议避免使用字段,除非它们是绝对必要的。在这种情况下,它们似乎不是,所以你最好将它们保留在相关方法中的本地。