下面的代码中有三个CA2000警告。对于cellFirst变量,我可以使用“使用”块来克服这一点。但是对于另外两个头单元,控件是在帮助函数中创建的。
CA2000 : Microsoft.Reliability :在方法GetTableCell(string、int、string、string)中,对象'lnkHide‘不是沿所有异常路径释放的。在所有对对象的引用超出作用域之前,在对象'lnkHide‘上调用lnkHide。 CA2000 : Microsoft.Reliability :在方法GetTableCell(string、int、string、string)中,对象'ltlText‘不是沿所有异常路径释放的。在所有对对象的引用超出作用域之前,在对象'ltlText‘上调用ltlText。 CA2000 : Microsoft.Reliability :在方法GetTableCell(string、int、string、string)中,对象'newCell‘不是沿所有异常路径释放的。在所有对对象的引用超出作用域之前,在对象'newCell‘上调用newCell。
码
protected void grdTransactions_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e != null)
{
if (e.Row.RowType == DataControlRowType.Header)
{
GridViewRow newHeaderRow = null;
try
{
newHeaderRow = new GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal);
using (TableHeaderCell cellFirst = new TableHeaderCell())
{
cellFirst.ColumnSpan = 1;
cellFirst.Text = "FIRST";
newHeaderRow.Cells.Add(cellFirst);
}
//Associate
#region Associate
TableHeaderCell cellAssociate = GetTableCell("tableColGroupAssociate", 4, "associateHide", "Associate Transaction Info");
#endregion
//Financial
#region Financial
TableHeaderCell cellFinancial = GetTableCell("tableColGroupTransaction", 5, "financialHide", "Financial Transaction Info");
#endregion
newHeaderRow.Cells.Add(cellAssociate);
newHeaderRow.Cells.Add(cellFinancial);
((GridView)sender).Controls[0].Controls.AddAt(0, newHeaderRow);
}
finally
{
if (newHeaderRow != null)
{
newHeaderRow.Dispose();
newHeaderRow = null;
}
}
}
}
}
private static TableHeaderCell GetTableCell(string cssClassName, int colSpan, string hideClassName, string displayName)
{
TableHeaderCell newCell = new TableHeaderCell();
newCell.ColumnSpan = colSpan;
newCell.CssClass = cssClassName;
LiteralControl ltlText = new LiteralControl();
ltlText.Text = displayName;
newCell.Controls.Add(ltlText);
HyperLink lnkHide = new HyperLink();
lnkHide.Text = SupportToolUIResource.HideLinkText;
lnkHide.CssClass = hideClassName;
lnkHide.Target = SupportToolUIResource.HideLinkTarget;
newCell.Controls.Add(lnkHide);
return newCell;
}参考
更新代码
使用块来克服警告
using (TableHeaderCell cellAssociate = new TableHeaderCell())
{
GetTableCell(cellAssociate,"tableColGroupAssociate", 4, "associateHide", "Associate Transaction Info");
newHeaderRow.Cells.Add(cellAssociate);
}
private static void GetTableCell(TableHeaderCell cellAssociate, string cssClassName, int colSpan, string hideClassName, string displayName)
{
cellAssociate.ColumnSpan = colSpan;
cellAssociate.CssClass = cssClassName;
using (LiteralControl ltlText = new LiteralControl())
{
ltlText.Text = displayName;
cellAssociate.Controls.Add(ltlText);
}
using (HyperLink lnkHide = new HyperLink())
{
lnkHide.Text = SupportToolUIResource.HideLinkText;
lnkHide.CssClass = hideClassName;
lnkHide.Target = SupportToolUIResource.HideLinkTarget;
cellAssociate.Controls.Add(lnkHide);
}
}问题
应用程序中是否存在“使用”块(如更新代码所示)来克服警告的缺陷?
发布于 2012-11-22 09:43:04
请阅读What’s wrong with use of “Using” block on Webcontrols?,以获得有关这方面的一些见解。也请参考Why would I need to call dispose on ASP.NET Controls?
一些兴趣点(来自上述职位)如下:
https://stackoverflow.com/questions/13413603
复制相似问题