Cuando se trata de excepciones personalizadas, por lo general heredan de Excepción y luego añadir algunos campos/propiedades a mi clase de excepción para almacenar alguna información adicional:¿Cómo debo almacenar datos dentro de excepciones personalizadas?
public class MyException : Exception
{
public int ErrorCode{get;set;}
public MyException()
{}
}
En el ejemplo anterior, el valor ErrorCode
se almacena en la excepción , lo que significa que tengo que agregarlo y retirarlo si desde el objeto SerializationInfo
en el constructor protegido y el método Oreemplazado.
La clase Exception tiene una propiedad Data, que según MSDN:
Obtiene una colección de pares clave/valor que proporcionan información adicional definida por el usuario sobre la excepción.
Si puedo almacenar el código de error dentro de la Data
, se pondrá en serie para mí por la clase de excepción (de acuerdo con reflector), lo que significa que mi clase de excepción ahora se ve como:
public class MyException : Exception
{
public int ErrorCode
{
get {return (int) Data["ErrorCode"];}
set {Data["ErrorCode"] = value;}
}
public MyException()
{}
}
Estos medios que si bien hay un poco más de trabajo para hacer frente al get/set del código de error (como tratar con los errores de transmisión y las situaciones en las que el código de error podría no estar en el diccionario), no tengo que preocuparme por la serialización/deserializándolo
¿Es esto solo dos formas diferentes de lograr lo mismo, o una forma tiene alguna ventaja clara sobre la otra (aparte de las que ya he mencionado)?