Я пытаюсь выяснить, как создать метод Equals, который сравнивает содержимое двух очередей. Вот мой код:Метод Bool Equals всегда возвращает false при сравнении очередей с идентичным содержимым
public OurQueue(int capacity = 10)
{
myArray = new T[capacity];
}
private void Increment(ref int value)
{
if (++value == myArray.Length)
value = 0;
}
public bool Equals(T item)
{
OurQueue<T> Q1 = new OurQueue<T>();
OurQueue<T> Q2 = new OurQueue<T>();
bool itemEqual = false;
if (IsEmpty() == true)
throw new ApplicationException("Can't compare empty queues");
while (Q1.Count() != 0 && Q2.Count() != 0)
{
if (Q1.myArray[mFront].Equals(Q2.myArray[mFront]))
{
itemEqual = true;
Q1.Increment(ref mFront);
Q2.Increment(ref mFront);
}
else
return itemEqual = false;
}
return itemEqual;
}
Любые мысли о том, где я неправильно?
EDITED: добавлен метод OurQueue и Increment в соответствии с запросом.
Приращение добавит один к mFront? в то время как вы дважды вызывали функцию в цикле – Matt
Вам нужно опубликовать класс 'OurQueue' или, по крайней мере, описать реализацию' OurQueue.Increment'. –
Для ссылочных типов методы Equals возвращают true, если ссылки одинаковы - значения объекта не проверяются. Итак, вы хотите сравнить ссылки или фактические значения в ваших очередях. Хотя я несколько смущен вашим кодом (например, откуда берутся две очереди), не возвратит ли он значение последнего сравнения в двух очередях. Если две очереди пустые, результат не будет равен true - вы по умолчанию равны false. – PaulF