.Net - 正确配置儿童对象

时间:2010-08-19 16:55:35

标签: .net vb.net visual-studio dispose code-analysis

从代码分析(Visual Studio),我收到了这个警告:

警告2 CA2000:Microsoft.Reliability:...在对所有引用超出范围之前调用System.IDisposable.Dispose对象'l'...

所以,我改变了代码:

Dim l As LiteralControl = New LiteralControl
AddHandler l.DataBinding, AddressOf OnDataBinding
container.Controls.Add(l)

Dim l As LiteralControl = Nothing
Try
    l = New LiteralControl
    AddHandler l.DataBinding, AddressOf OnDataBinding
    container.Controls.Add(l)
Finally
    If Not l Is Nothing Then
        l.Dispose()
    End If
End Try

警告消失,但文字控件不再显示在页面上......

修改

请注意,代码来自Microsoft网页:http://msdn.microsoft.com/en-us/library/system.web.ui.itemplate.instantiatein.aspx

1 个答案:

答案 0 :(得分:3)

警告确实关于如何创建项目,然后实际上从未实际连接到容器。 假设(但不现实),AddHandler调用可能会失败,然后控件永远不会被添加到容器中,然后没有人会丢弃它。

而不是处理最终(它一直在摧毁你的对象 ),你需要将其更改为 catch ,并且处理捕获物,然后重新抛出异常。

这将消除警告并给你正确处理处置。是的,在这种特殊情况下,这是不现实的,但这是可能的。