Challenge 2: A Property Setter With Validation Logic — Possible Solution ==================================================================== Program.cs: class Customer { private string _name = ""; public string Name { get => _name; set { var trimmed = value.Trim(); if (trimmed.Length == 0) throw new ArgumentException("Name cannot be empty."); _name = trimmed; } } } var customer = new Customer(); customer.Name = " Alice "; Console.WriteLine($"[{customer.Name}]"); Output: [Alice] Explanation: `customer.Name = " Alice ";` looks exactly like plain field assignment at the call site, but it's really invoking the set accessor, which trims the value and validates it isn't empty before storing it in the private backing field _name. Reading customer.Name afterward returns the already-trimmed value. None of this validation logic is visible from the call site itself -- exactly the chapter's own warn-box point about properties hiding real logic behind field-like syntax. WHY THIS WORKS AS AN ANSWER ------------------------------ This implements a setter with genuine validation/transformation logic (trimming and an empty-string guard) while keeping the call site looking like ordinary field access, demonstrating the chapter's own "full property syntax with custom logic" section directly.