我正在为一个更大的应用程序开发一个插件,我在下面的代码中遇到了一个奇怪的问题。当在 Release 模式下运行或在没有断点的 Debug 下运行时,一切都很好。但是当我在下面的代码片段附近放置一个断点时,我得到了一个错误。看起来调试器预先评估了 if 块中导致错误的代码,尽管实际上从未达到此代码。
请注意,索引器会在内部检查不正确的索引并触发事件到主应用程序。主应用程序通过显示一个对话框并自行关闭来处理此错误事件。我无法更改主应用程序,也无法修改索引器(尽管我认为抛出异常而不是触发事件可能会起作用)。
int a = GetA(); // returns 0
if (a == 1)
{
_manager[a - 1][ColumnName.Name] = "X"; //Manager has an indexer returning a DataRow.
}
if (a == 2)
{
_manager[a - 1][ColumnName.Name] = "Y";
}
当我在工具->选项->调试中禁用“启用属性评估和其他隐式函数调用”时,它工作得很好。你有任何想法如何解决这个问题吗?我不想要这个错误消息,但我也不想失去调试器评估的便利。
[编辑] 我重写了描述。
[更新]我暂时更改了索引器内的代码,以抛出一个异常,将事件委托给上层错误处理层,它有所帮助。VS 调试器吞下了异常,因此所有副作用都停止了(错误处理层没有显示消息框)
所以问题是:
除了第三个选项:
1)从弹出的事件到上层永久变为异常
2)取消选中“启用属性评估和其他隐式函数调用”