using System.Collections.Generic;
class WarehouseHandlingFee
public decimal startValue { get; set; }
public decimal fee { get; set; }
public string calculation_type { get; set; }
public string value_unit { get; set; }
static WarehouseHandlingFee GetHandlingFee(List<WarehouseHandlingFee> warehouseHandlingFeeList, decimal weightKg)
weightKg = weightKg < warehouseHandlingFeeList.Min(f => f.startValue)
? warehouseHandlingFeeList.Min(f => f.startValue)
decimal feeWeight = warehouseHandlingFeeList.Where(x => x.startValue <= weightKg).Max(x => x.startValue);
return warehouseHandlingFeeList.Single(x => x.startValue == feeWeight);
static void Main(string[] args)
var warehouseHandlingFeeList = new List<WarehouseHandlingFee>
new WarehouseHandlingFee { startValue = 1.000m, fee = 3.000m, calculation_type = "fixed-fee", value_unit = "weight" },
new WarehouseHandlingFee { startValue = 10.010m, fee = 7.000m, calculation_type = "fixed-fee", value_unit = "weight" },
new WarehouseHandlingFee { startValue = 20.010m, fee = 10.000m, calculation_type = "fixed-fee", value_unit = "weight" },
new WarehouseHandlingFee { startValue = 30.010m, fee = 0.500m, calculation_type = "rate", value_unit = "weight" }
decimal inputWeight = 30001 / 1000;
var handlingFee = GetHandlingFee(warehouseHandlingFeeList, inputWeight);
Console.WriteLine("Input Weight: " + inputWeight);
Console.WriteLine("Fee Start Value: " + handlingFee.startValue);
Console.WriteLine("Fee: " + handlingFee.fee);
Console.WriteLine("Calculation Type: " + handlingFee.calculation_type);
Console.WriteLine("Value Unit: " + handlingFee.value_unit);