0

How do I return a range for the arithmetic type and a fixed value for the geometric type at the same time? I know that I can't but is there a workaround?

public (double MinimumProfitPerGrid, double MaximumProfitPerGrid) CalculateProfitPerGrid()
{
    switch (_gridType)
    {
        case GridType.Arithmetic:
            var priceDifference = (_upperLimit - _lowerLimit) / _numberOfGrids;
            var maximumProfitPerGrid = (1 - FeePercentage) * priceDifference / _lowerLimit - 2 * FeePercentage;
            var minimumProfitPerGrid = _upperLimit * (1 - FeePercentage) / (_upperLimit - priceDifference) - 1 - FeePercentage;
            return (minimumProfitPerGrid, maximumProfitPerGrid);

        case GridType.Geometric:
            var priceRatio = Math.Pow(_upperLimit / _lowerLimit, 1.0 / _numberOfGrids);
            var profitGrid = (1 - FeePercentage) * priceRatio - 1 - FeePercentage;
            return profitGrid;
        
        default:
            throw new ArgumentOutOfRangeException();
    }
}
Peter Csala
  • 17,736
  • 16
  • 35
  • 75
nop
  • 4,711
  • 6
  • 32
  • 93

1 Answers1

3

If the caller doesn't care about which one of the branches the method takes, it would be reasonable to represent the single value as a range starting and ending at that same point:

return (profitGrid, profitGrid);

Then the caller can just treat everything this method returns as a range.

Sweeper
  • 213,210
  • 22
  • 193
  • 313