creating my own exceptions c#

c#, exception, try-catch

Solution

`Exception` is just a class like many other classes in .Net. There're, IMHO, two tricky things with user defined exceptions:

- Inherit your exception class from Exception, not from obsolete ApplicationException

- User defined exception should have many constructors - 4 in the typical case

Something like that:

public class NegativeNumberException: Exception {
  /// <summary>
  /// Just create the exception
  /// </summary>
  public NegativeNumberException()
    : base() {
  }

  /// <summary>
  /// Create the exception with description
  /// </summary>
  /// <param name="message">Exception description</param>
  public NegativeNumberException(String message)
    : base(message) {
  }

  /// <summary>
  /// Create the exception with description and inner cause
  /// </summary>
  /// <param name="message">Exception description</param>
  /// <param name="innerException">Exception inner cause</param>
  public NegativeNumberException(String message, Exception innerException)
    : base(message, innerException) {
  }

  /// <summary>
  /// Create the exception from serialized data.
  /// Usual scenario is when exception is occured somewhere on the remote workstation
  /// and we have to re-create/re-throw the exception on the local machine
  /// </summary>
  /// <param name="info">Serialization info</param>
  /// <param name="context">Serialization context</param>
  protected NegativeNumberException(SerializationInfo info, StreamingContext context)
    : base(info, context) {
  }
}

Problem

Following examples in my C# book and I came across a book example that doesn't work in Visual Studio. It deals with creating your own exceptions, this one in particular is to stop you from taking the square root of a negative number. But when I create the NegativeNumberException by using "throw new" I get an error that says "The type or namespace name 'NegativeNumberException' could not be found (are you missing a using directive or an assembly reference?)" How can I create my own exceptions if this isn't the right way? Maybe my book is outdated? Here's the code: ``` class SquareRootTest { static void Main(string[] args) { bool continueLoop = true; do { try { Console.Write("Enter a value to calculate the sqrt of: "); double inputValue = Convert.ToDouble(Console.ReadLine()); double result = SquareRoot(inputValue); Console.WriteLine("The sqrt of {0} is {1:F6)\n", inputValue, result); continueLoop = false; } catch (FormatException formatException) { Console.WriteLine("\n" + formatException.Message); Console.WriteLine("Enter a double value, doofus.\n"); } catch (NegativeNumberException negativeNumberException) { Console.WriteLine("\n" + negativeNumberException.Message); Console.WriteLine("Enter a non-negative value, doofus.\n"); } } while (continueLoop); }//end main public static double SquareRoot(double value) { if (value < 0) throw new NegativeNumberException( "Square root of negative number not permitted."); else return Math.Sqrt(value); } } ```

Original source