This week’s training was on the new features of C# 3.0. Namely:
- Automatically Implemented Properties
- Object & Collection Initializers
- Dynamic Local Variables
- Anonymous Types
- Extension Methods
Auto Props, Initializers and Dynamic Local Variables are a godsend to C# devs. It simplifies coding greatly and makes writing unit test cases a breeze.
Old Way
[Test] public void CalculateInvoiceTotalTest() { Invoice invoice = new Invoice(); invoice.Items = new List<InvoiceItem>(); // Add items InvoiceItem item = new InvoiceItem(); item.UnitPrice = 28.50; item.Quantity = 2; item.Discount = 0.1; invoice.Items.Add(i); item = new InvoiceItem(); item.UnitPrice = 5.45; item.Quantity = 5; invoice.Items.Add(i) double expected = 78.55; double actual = invoice.Total; Assert.IsTrue(actual, expected); }
New Way
[Test] public void CalculateInvoiceTotalTest() { Invoice invoice = new Invoice { Items = new List<InvoiceItem>() { new InvoiceItem() { UnitPrice = 28.50, Quantity = 2, Discount = 0.1 }, new InvoiceItem() { UnitPrice = 5.45, Quantity = 5; } } }; double expected = 78.55; double actual = invoice.Total; Assert.IsTrue(actual, expected); }
It’s a lot clearer that I added 2 invoice items and it only took me one line each to create the line items. Granted you can simplify the old code by using a custom constructor but you still need a line to add the item to the collection.
There were some very good series of Channel 9 run by Bruce Kyle and Stuat Celarier in their Whirlwind series about C#