好的,所以在花了一天的大部分时间在一段代码中调试一个愚蠢的输入错误后,我很好奇为什么发生了特定的操作而不是异常。
首先是问题代码。
Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
Dim hl As New HyperLink
AddHandler hl.DataBinding, AddressOf Me.BindData
container.Controls.Add(container)
End Sub
显而易见的问题是我们正在尝试将容器添加到自身,我本来希望这会导致异常。但是,它导致页面提示用户输入其登录凭据(浏览器中的Windows身份验证)。
有没有人知道为什么会这样,以及为什么没有发生异常或其他事情?
修改
问题的原因是由于这个错误,页面变得无用,并提示Windows登录,并且不提供堆栈溢出异常或任何其他异常。
答案 0 :(得分:1)
您希望异常发生在哪里?在此代码中,没有理由应该生成异常。然而,在控件中嵌套控件可能是不合逻辑的,它仍然有效。它不会很好地绘制,除非绘制/绘图层特别注意嵌套,否则可能导致Stack Overflow / Infinite循环。但这不会发生在这里,但在布局/绘画期间。
答案 1 :(得分:1)
控件是可以任意嵌套的东西;任何控件都可以有其他控件的集合(我确定这个的原因是显而易见的)。话虽如此,将给定对象的引用添加到其自身内的此类对象的集合中并没有“错误”。虽然多余,但并不例外。