using IStation.Epanet.Enums; using System; namespace IStation.Epanet { ///Epanet exception codes handler. public class EnException : Exception { ///Array of arguments to be used in the error string creation. private readonly object[] _arguments; ///Epanet error code. protected readonly ErrorCode _code; /// Get error code. /// Code id. public ErrorCode Code => _code; ///Constructor from error code id. ///Error code id. public EnException(ErrorCode code) { _arguments = null; _code = code; } /// Constructor from error code id and multiple arguments. /// Error code id. /// Extra arguments. /// public EnException(ErrorCode code, params object[] arg) { _code = code; _arguments = arg; } /// Constructor from error code id and inner exception. /// Error code id. /// /// public EnException(ErrorCode code, Exception innerException) : base(null, innerException) { _code = code; } ///Handles the exception string conversion. /// Final error string. public override string Message { get { string format; try { format = _code.GetMsg(); } catch (Exception) { format = null; } if (format == null) return string.Format("Unknown error message ({0})", _code); return _arguments != null ? string.Format(format, _arguments) : format; } } } }