条件减少
Conditions reduction
我正在计算订单收据显示的付款金额,我想将这些条件减少到最大值:
private double CalculateFinalTotal(bool hasPrommoCode,
double promoCodeValue,
double finalTotal,
double? tip)
{
if (!hasPrommoCode) return finalTotal;
if (promoCodeValue > finalTotal && tip.HasValue) return tip.Value;
else if (promoCodeValue > finalTotal) return 0;
else if (tip.HasValue)
{
var totalWithoutTip = finalTotal - tip.Value;
return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
}
else return finalTotal - promoCodeValue;
}
首先,never use double
for money-related code, always use decimal
.
除此之外,您可以使用 GetValueOrDefault()
省略检查 tip
是否有值。并且,遵循 c# 约定(如果您真的关心可读性),始终在 if
语句周围使用方括号。
你应该得到这样的结果:
private decimal CalculateFinalTotal(bool hasPrommoCode, decimal promoCodeValue,
decimal finalTotal, decimal? tip)
{
if (!hasPrommoCode)
{
return finalTotal;
}
if (promoCodeValue > finalTotal)
{
// if .HasValue == true => return .Value; otherwise return 0
return tip.GetValueOrDefault();
}
if (tip.HasValue)
{
var totalWithoutTip = finalTotal - tip.Value;
return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
}
return finalTotal - promoCodeValue;
}
我正在计算订单收据显示的付款金额,我想将这些条件减少到最大值:
private double CalculateFinalTotal(bool hasPrommoCode,
double promoCodeValue,
double finalTotal,
double? tip)
{
if (!hasPrommoCode) return finalTotal;
if (promoCodeValue > finalTotal && tip.HasValue) return tip.Value;
else if (promoCodeValue > finalTotal) return 0;
else if (tip.HasValue)
{
var totalWithoutTip = finalTotal - tip.Value;
return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
}
else return finalTotal - promoCodeValue;
}
首先,never use double
for money-related code, always use decimal
.
除此之外,您可以使用 GetValueOrDefault()
省略检查 tip
是否有值。并且,遵循 c# 约定(如果您真的关心可读性),始终在 if
语句周围使用方括号。
你应该得到这样的结果:
private decimal CalculateFinalTotal(bool hasPrommoCode, decimal promoCodeValue,
decimal finalTotal, decimal? tip)
{
if (!hasPrommoCode)
{
return finalTotal;
}
if (promoCodeValue > finalTotal)
{
// if .HasValue == true => return .Value; otherwise return 0
return tip.GetValueOrDefault();
}
if (tip.HasValue)
{
var totalWithoutTip = finalTotal - tip.Value;
return (totalWithoutTip > promoCodeValue ? totalWithoutTip - promoCodeValue : 0) + tip.Value;
}
return finalTotal - promoCodeValue;
}