.net 关于使用反射和模糊处理进行错误处理的建议

.net 关于使用反射和模糊处理进行错误处理的建议,.net,vb.net,visual-studio-2010,error-handling,.net,Vb.net,Visual Studio 2010,Error Handling,我在方法中使用的标准错误处理例程如下所示: Try Cursor.Current = Cursors.WaitCursor Cursor.Current = Cursors.Default Catch ex As Exception MyAssembly.SystemError(MethodBase.GetCurrentMethod().Name, ex.Message, MsgBoxStyle.Exclamation) End Try MyAssembly.Sy

我在方法中使用的标准错误处理例程如下所示:

Try
    Cursor.Current = Cursors.WaitCursor



    Cursor.Current = Cursors.Default
Catch ex As Exception
    MyAssembly.SystemError(MethodBase.GetCurrentMethod().Name, ex.Message, MsgBoxStyle.Exclamation)
End Try
MyAssembly.SystemError
函数将错误记录到文件中,并显示一个消息框

在我通过模糊处理运行代码之前,这一切都很正常,因为它将方法名重命名为一些无法理解的字符(应该是这样),因此
MethodBase.GetCurrentMethod().name
返回的反射方法名同样无法理解

我已经开始用方法的名称替换
MethodBase.GetCurrentMethod().Name
,但是如果重命名方法,我可能(而且确实)忘记更改错误处理名称


有人有什么好主意来处理这一切吗?

不幸的是,这是模糊处理的陷阱之一,没有真正的解决办法(模糊处理的全部目的是隐藏和模糊您试图在此处显示的信息)

从可用性的角度来看,您应该尽可能从有意义的地方构造错误消息,例如“找不到文件{0}”。如果您混淆了代码,那么您肯定不能依靠方法名(或其他反映的信息)来构造错误消息

顺便说一句,以这种方式将方法名作为字符串嵌入到方法中实际上是撤销了模糊处理程序的工作。我的建议是:

  • 首先,更改错误处理以预测可能发生的错误情况(如文件IO或DB访问失败),并根据具体情况以合理的方式进行处理,这样可以避免在错误消息中使用方法名称
  • 如果不能做到这一点,那么如果你真的在应用程序中依赖这些信息,就不要混淆(无论如何,我从来都不赞成混淆)

  • 最后,您正在执行的错误处理可能无论如何都应该在事件中完成,但这完全是另一个主题!:-)

    我同意你的最后一句话,但是,在他的例子中,他不能用一个属性(MethodNameAttribute=“whatever”)标记他的方法,然后在他的异常处理程序中读取该属性吗?@Saif是的,但是如果你这样做,那么对名称进行模糊处理是一项相对简单的任务,那么为什么首先要进行模糊处理呢?