una try tipos sharp que practicas net manejo existen excepción excepciones errores crear como catch capturar buenas asp c# custom-exceptions

try - ¿Cuáles son las mejores prácticas estándar de la industria para implementar excepciones personalizadas en C#?



throw exception c# (4)

Aquí está el código para crear una excepción personalizada:

using System; using System.Runtime.Serialization; namespace YourNamespaceHere { [Serializable()] public class YourCustomException : Exception, ISerializable { public YourCustomException() : base() { } public YourCustomException(string message) : base(message) { } public YourCustomException(string message, System.Exception inner) : base(message, inner) { } public YourCustomException(SerializationInfo info, StreamingContext context) : base(info, context) { } } }

Consulte también: http://www.capprime.com/software_development_weblog/2005/06/16/CreatingACustomExceptionClassInC.aspx

¿Cuáles son las mejores prácticas estándar de la industria para implementar excepciones personalizadas en C #?

He revisado Google y hay una gran cantidad de recomendaciones, sin embargo, no sé cuáles tienen más credibilidad.

Si alguien tiene algún enlace a artículos autorizados, eso también sería útil.


El estándar para crear excepciones personalizadas es derivar de Exception . Luego puede introducir sus propias propiedades / métodos y constructores sobrecargados (si corresponde).

Este es un ejemplo básico de una ConnectionFailedException personalizada que toma un parámetro adicional que es específico para el tipo de excepción.

[Serializable] public class ConnectionFailedException : Exception { public ConnectionFailedException(string message, string connectionString) : base(message) { ConnectionString = connectionString; } public string ConnectionString { get; private set; } }

En la aplicación, esto podría usarse en situaciones en las que la aplicación está intentando conectarse a una base de datos, por ejemplo

try { ConnectToDb(AConnString); } catch (Exception ex) { throw new ConnectionFailedException(ex.Message, AConnString); }

Depende de usted manejar la ConnectionFailedException en un nivel superior (si corresponde)

También eche un vistazo a Diseño de excepciones personalizadas y excepciones personalizadas



Uso las Excepciones personalizadas para comunicar la naturaleza del error.

Por ejemplo, me gusta usar el marco proporcionado "ArgumentNullException" para verificar los argumentos. Luego, más tarde, cuando veo este error en el depurador, o en un registro de errores, inmediatamente conozco la naturaleza del error sin seguir leyendo.

El otro extremo del espectro es la excepción InvalidOperationException que podría significar casi cualquier cosa.

La alternativa a las excepciones personalizadas es mensajes de error detallados. Eso está bien, pero al hacer una excepción personalizada como ConnectionFailed es más significativo. Entonces el mensaje en sí puede dar mayores detalles.

Al crear tales excepciones personalizadas, no agrego ninguna nueva propiedad. La razón de esto es que si tiene un registrador de errores, desea que funcione en todas las excepciones. Si agrega una propiedad especial, el registrador de errores la ignorará. Por ejemplo, si usa MSTest, cuando ejecuta su prueba y falla, no se muestran las propiedades personalizadas. Pero si te quedas con la propiedad Mensaje de la clase base, se mostrará bien.

Así que la subclasificación es muy simple:

public class NavigationException : Exception{ public NavigationException() {} public NavigationException(string msg) : base(msg) {} public NavigationException(string msg, Exception inner) : base(msg, inner) {} }

Esto es muy sencillo, funciona con cualquier registrador de errores, y cuando lo veo, sé que fue un problema de navegación y puedo ver los detalles si es necesario.

Greg