从代码分析(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
答案 0 :(得分:3)
警告确实关于如何创建项目,然后实际上从未实际连接到容器。 假设(但不现实),AddHandler调用可能会失败,然后控件永远不会被添加到容器中,然后没有人会丢弃它。
而不是处理最终(它一直在摧毁你的对象 ),你需要将其更改为 catch ,并且处理捕获物,然后重新抛出异常。
这将消除警告并给你正确处理处置。是的,在这种特殊情况下,这是不现实的,但这是可能的。