donotbea
donotbea

Reputation: 81

C# how to pass queue parameters as values instead of the default reference

I have this class that accepts the queue parameter as references. I want to not change the sent queue so use the values instead of references.

    public static Deque<DateClose> SMAMethod (Queue<DateClose> queue, int period)
    {
        _queue = queue;
        _period = period;

        decimal average, sum=0;
        Deque<DateClose> sample = new Deque<DateClose>(_period);
        DateClose dateClose = null;
        for (int i = 0; i < _period; i++)
        {
            dateClose = _queue.Dequeue();

            if (dateClose != null)
            {
                sum += dateClose.ClosingPrice;
                sample.AddToBack(dateClose);
            }
        }
        average = sum/_period;
        DateClose dc = new DateClose { Time = dateClose.Time, ClosingPrice = average };

        sample.AddToBack(dc);
        return sample;
    }

This is the calling code:

// send the movingAverageQueue along with the MAperiod to caluclate a SMA queue
var simpleMovingAverage = SMA.SMAMethod(movingAverageQueue, MAperiod);

Upvotes: 1

Views: 825

Answers (1)

Dan T.
Dan T.

Reputation: 425

Perhaps you should use a shallow clone (queue supports it)

public static Deque<DateClose> SMAMethod (Queue<DateClose> queue, int period)
{
    _queue = queue.Clone();
    //....

Upvotes: 4

Related Questions