FCL是否已经有异常意味着方法执行失败?

时间:2009-03-06 12:19:50

标签: .net exception fcl

我有自己的异常,它一直在抛出方法的执行失败(在我的情况下是p / invoke)。

public PInvokeException(string methodName)
: base(String.Format(CultureInfo.CurrentCulture,
"An error occured while external method '{0}' call",
methodName)) { }

但我想用现有的替换它。 FCL中有类似的东西吗?

4 个答案:

答案 0 :(得分:2)

根据您是否抛出PInvokeException与InvalidOperationException,您的调用者是否会采取不同的操作?如果是,则创建自定义PInvokeException。否则使用InvalidOperationException和清除错误消息。

请参阅How to design Exception Hierarchies

答案 1 :(得分:1)

在BCL中没有专门用于PInvoke调用的内容。存在的最接近的是Marshal.GetExceptionForHR和Marshal.GetHRForLastWin32Error。每当PInvoke调用失败时,您都可以使用这两个函数的组合来抛出相应的异常。

例如:

throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());

答案 2 :(得分:1)

有一个:Win32Exception

如果您抛出异常的方法是.Net方法,那么使用自定义异常(或现有异常,具体取决于发生的情况)。

如果你代表调用你方法的人调用一个方法(或者用反射做某事 - 但是MethodInfo.Invoke无论如何都要这样做),例如:

public void DoIt(Action action) { action(); }

您应该使用TargetInvocationException例外。

如果您无法处理异常,请重新抛出或忽略它。

答案 3 :(得分:1)

System.Runtime.InteropServices.ExternalException怎么样?