Here is my code
public class Bill { public int BillNumber { get; set; } public DateTime BillDate { get; set; } public List<BillLine> LineItems { get; set; } public void AddBillLine(BillLine billLine) { LineItems.Add(billLine); } public void RemoveBillLine(int SOMEID) { throw new NotImplementedException(); } /// GetTotal returns the sum of (Cost * Quantity) for each line item public decimal GetTotal() { throw new NotImplementedException(); } public void MergeBill(Bill sourceBill) { throw new NotImplementedException(); } /// deep clone of the current bill (all fields and properties) public Bill Clone() { throw new NotImplementedException(); } public override string ToString() { throw new NotImplementedException(); } } public class BillLine { public int BillLineId { get; set; } public string Description { get; set; } public int Quantity { get; set; } public double Cost { get; set; } } public class Program { static void Main(string[] args) { Console.WriteLine("Billing app started...."); CreateBillWithOneItem(); CreateBillWithMultipleItemsAndQuantities(); RemoveItem(); MergeBill(); CloneBill(); BillToString(); } private static void CreateBillWithOneItem() { var bill = new Bill(); bill.AddBillLine(new BillLine() { BillLineId = 1, Cost = 6.99, Quantity = 1, Description = "Apple" }); Console.WriteLine(bill.GetTotal()); } private static void CreateBillWithMultipleItemsAndQuantities() { var bill = new Bill(); bill.AddBillLine(new BillLine() { BillLineId = 1, Cost = 10.21, Quantity = 4, Description = "Banana" }); bill.AddBillLine(new BillLine() { BillLineId = 2, Cost = 5.21, Quantity = 1, Description = "Orange" }); bill.AddBillLine(new BillLine() { BillLineId = 3, Cost = 5.21, Quantity = 5, Description = "Pineapple" }); Console.WriteLine(bill.GetTotal()); } private static void RemoveItem() { var bill = new Bill(); bill.AddBillLine(new BillLine() { BillLineId = 1, Cost = 5.21, Quantity = 1, Description = "Orange" }); bill.AddBillLine(new BillLine() { BillLineId = 2, Cost = 10.99, Quantity = 4, Description = "Banana" }); bill.RemoveBillLine(1); Console.WriteLine(bill.GetTotal()); } private static void MergeBill() { var bill1 = new Bill(); bill1.AddBillLine(new BillLine() { BillLineId = 1, Cost = 10.33, Quantity = 4, Description = "Banana" }); var bill2 = new Bill(); bill2.AddBillLine(new BillLine() { BillLineId = 2, Cost = 5.22, Quantity = 1, Description = "Orange" }); bill2.AddBillLine(new BillLine() { BillLineId = 3, Cost = 6.27, Quantity = 3, Description = "Blueberries" }); bill1.MergeBill(bill2); Console.WriteLine(bill1.GetTotal()); } private static void CloneBill() { var bill = new Bill(); bill.AddBillLine(new BillLine() { BillLineId = 1, Cost = 6.99, Quantity = 1, Description = "Apple" }); bill.AddBillLine(new BillLine() { BillLineId = 2, Cost = 6.27, Quantity = 3, Description = "Blueberries" }); var clonedBill = bill.Clone(); Console.WriteLine(clonedBill.GetTotal()); } private static void BillToString() { var bill = new Bill() { BillDate = DateTime.Now, BillNumber = 1000, LineItems = new List<BillLine>() { new BillLine() { BillLineId = 1, Cost = 6.99, Quantity = 1, Description = "Apple" } } }; Console.WriteLine(bill.ToString()); }
}
Can anyone please suggest how to solve this error : System.NullReferenceException: 'Object reference not set to an instance of an object.'
Any suggestion what are the necessary changes I need to do in my application to avoid the errors
The error is coming from LineItems.Add(billLine);
eg. tried adding
List<BillLineItem> BillLineItems = new List<BillLineItem>();
public void AddBillLine(BillLine billLine)
{
LineItems.Add(billLine);
}