En primer lugar, parece que puede estar utilizando try/catch con demasiada frecuencia, especialmente si está capturando Exception
. los bloques try/catch deben ser relativamente raros; a menos que realmente pueda "manejar" la excepción, debería dejarla pasar a la siguiente capa de la pila.
Ahora, suponiendo que realmente hace quiere todos estos bloques try/catch, ¿por qué no es una opción crear un delegado? Con métodos anónimos y expresiones lambda, así como los delegados de Func/Action en el espacio de nombres System
, básicamente hay muy poco trabajo por hacer. Usted escribe:
public void SurroundWithTryCatch(Action action)
{
try
{
action();
}
catch(Exception ex)
{
//something even more boring stuff
}
}
y luego su SurroundWithTryCatch(MyMethod)
va a funcionar bien, si no toma parametros.
Alternativamente, si usted no quiere llamar a un método diferente , acaba de escribir:
public void MyMethod()
{
SurroundWithTryCatch(() =>
{
// Logic here
});
}
Si tiene que volver a partir del método, que puede hacer:
public int MyMethod()
{
return SurroundWithTryCatch(() =>
{
// Logic here
return 5;
});
}
con una sobrecarga genérica de SurroundWithTryCatch
de esta manera:
public T SurroundWithTryCatch<T>(Func<T> func)
{
try
{
return func();
}
catch(Exception ex)
{
//something even more boring stuff
}
}
La mayor parte de esto también estaría bien en C# 2, pero la inferencia de tipo no te ayudará tanto y tendrás que usar métodos anónimos en lugar de expresiones lambda.
Para volver al principio: intente utilizar try/catch con menos frecuencia. (try/finally debería ser mucho más frecuente, aunque generalmente se escribe como una instrucción de uso.)
@Jon ahh me ganaste it..DAM YOU;) –