我的应用程序遇到了一些有线问题。当我进行调试并检查这些值是否正确更新时。但是如果它运行时没有调试值不能正确更新。如何摆脱这个问题。
这是我的静态扩展方法。
public static decimal CalculateTotal(this Invoice invoice)
{
var subTotal = invoice.SubTotal;
var total = subTotal;
if (invoice.Fees == null || !invoice.Fees.Any()) return Math.Round(total, 2);
foreach (var fee in invoice.Fees.Where(f => !f.IsCancelled).OrderBy(f => f.Precedence))
{
var value = 0m;
if (fee.Percentage.HasValue)
{
if (fee.Total != null) value += fee.Total.Value;
}
if (fee.Fixed.HasValue)
{
value += fee.Fixed.Value;
}
total += value;
}
return Math.Round(total, 2);
}
以上方法调用如下。
public InvoiceDetail Booking(my parameters)
{
var bookingProcessModel = BookingProcessDetails(providerKey, ownerKey, serviceId, petKeys, selectedDates, selectedTimes, selectedExtraServices, selectedResourceId, userType, discount, specialPrices, isProviderPickUp);
bookingProcessModel.Invoice.CalculateTotal();//here I'm calling that method
Catalog.SaveChanges();//data base save
var invoiceDetailModel = GetInvoiceDetailModel(bookingProcessModel.AppointmentModel, bookingProcessModel.Invoice);
return invoiceDetailModel;
}
在上述方法之后,数据库保存值是错误的。但是当我对上面的扩展方法进行调试并检查它是否正常工作时。问题是什么?有什么帮助吗?
答案 0 :(得分:0)
您的扩展方法会返回Decimal
,但您不会将此内容分配给任何内容......
bookingProcessModel.Invoice.CalculateTotal();
...只返回Decimal
值,所以你看到的是正确的行为。
我认为您不需要Extension method
,您可以在Invoice课程中将CalculateTotal
上的方法设为Invoice
。
类似的东西:
var calculatedInvoice = Invoice.CalculateTotal(bookingProcessModel.Invoice);
CalculateTotal
将返回一个包含计算值的新发票。
如果您想坚持使用扩展方法,则需要指定返回值。