Reputation: 81
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
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