class Exception { public Message; public InnerException; public Exception(message,$inner) { this.Message = message; this.InnerException = inner; } public ToString() { var messagePart = $"{Class.Name(this)}: {Message}"; if(InnerException != undefined && InnerException != null) { var innerEx = InnerException.ToString().Replace("\n","\n\t"); return $"{messagePart}\nInner exception:\n{innerEx}"; } return messagePart; } } class OutOfRangeException : Exception { public OutOfRangeException(varName,$inner) { Exception($"{varName} is out of range.",inner); } }