Challenge 1: try/catch/finally, Then an Unchecked Custom Exception — Possible Solution ==================================================================== Program.cs: class OutOfStockException : Exception { public OutOfStockException(string message) : base(message) { } } static void DivideDemo() { try { int result = 10 / 0; Console.WriteLine(result); } catch (DivideByZeroException e) { Console.WriteLine("Caught: " + e.Message); } finally { Console.WriteLine("This always runs."); } } // No throws-style declaration exists in C# at all -- this method // compiles with zero warnings despite throwing. static void ShipItem(int stock) { if (stock <= 0) throw new OutOfStockException("No stock remaining."); Console.WriteLine("Shipped."); } DivideDemo(); ShipItem(0); // uncaught -- crashes the program, but the CODE ITSELF compiled cleanly Output: Caught: Attempted to divide by zero. This always runs. Unhandled exception. OutOfStockException: No stock remaining. at ShipItem(Int32 stock) ... Explanation: DivideDemo() behaves identically to java1-7's own try/catch/finally shape. ShipItem(), by contrast, throws OutOfStockException with absolutely no compile-time signal anywhere in its signature that it might do so -- no throws clause exists in C# at all. The method compiles cleanly regardless of whether callers handle the exception, confirming the chapter's own claim that C# has no checked-exception concept whatsoever. WHY THIS WORKS AS AN ANSWER ------------------------------ This demonstrates both the familiar try/catch/finally shape shared with java1-7 and, separately, a method throwing a custom exception with zero compiler enforcement or warning, directly confirming the chapter's central claim about C#'s unchecked-only exception model.