¿FCL ya tiene una excepción que significa que la ejecución del método falla?

StackOverflow https://stackoverflow.com/questions/618661

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo mi propia excepción, que he estado lanzando en error de ejecución de un método (p / invocar en mi caso).

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

Pero quiero reemplazarlo con el ya existente. ¿Hay en FCL algo así?

¿Fue útil?

Solución

¿Su interlocutor tomará diferentes acciones en función de si lanza una PInvokeException en lugar de una InvalidOperationException? Si es así, entonces cree una PInvokeException personalizada. De lo contrario, utilice InvalidOperationException y un claro mensaje de error.

Consulte Cómo diseñar jerarquías de excepción .

Otros consejos

No hay nada dedicado a las llamadas de PInvoke en el BCL. Lo más cercano que existe es Marshal.GetExceptionForHR y Marshal.GetHRForLastWin32Error. Puede usar la combinación de estas dos funciones para lanzar la excepción apropiada siempre que falle una llamada de PInvoke.

Ej:

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

Hay uno: Win32Exception .

Si el método del que está generando una excepción es un método .Net, debería utilizar una excepción personalizada (o una existente, según lo que haya ocurrido).

Si llama a un método en nombre de la persona que llama a su método (o algo relacionado con la reflexión, pero MethodInfo.Invoke lo hace de todos modos), por ejemplo:

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

Debería utilizar TargetInvocationException excepción.

Si no puede manejar la excepción, vuelva a lanzarla o ignórela.

¿Qué hay de System.Runtime.InteropServices.ExternalException ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top