Member 14157091 Ответов: 3

Как мне выйти из этой функции


привет,
у меня есть этот кусок кода
<pre>public student dequeue()
        {
            if (size > 0)
            {
                size--;
                return List.removeBeginning();
            }
            else
            {
                return ("nothing to dequeue");
                
            }
        }



}

Мне нужен способ вернуть что-то с другим типом, чем объявленный, в моем случае мне нужно вернуть строку, и моя функция имеет тип "student"

Что я уже пробовал:

Я попытался использовать return null, но это тормозит мой код.

3 Ответов

Рейтинг:
9

F-ES Sitecore

Другой вариант состоит в том, чтобы ваша функция возвращала "bool" и использовала параметр "out" для возврата студента. Если это удастся вам установить студенческий и возвращать true, иначе вернет false. Вызывающий код проверяет, если функция возвращает true или false. Вот как работают такие функции, как int.Попробуй разбить работу.

public bool dequeue(out student student)
{
    if (size > 0)
    {
        size--;
        student = List.removeBeginning();
        return true;
    }
    else
    {
        student = null;
        return false;
    }
}


использование

student s;

if (dequeue(out s))
{
    // s will have a value
}


Member 14157091

да, это должно быть сделано. Я новичок в c#, и если бы вы могли написать на c# то, что вы имели в виду, это было бы идеально

F-ES Sitecore

Я обновил свое решение

CPallini

5.

Рейтинг:
2

Richard MacCutchan

Вы должны возвращать тот же тип объекта, который был объявлен в определении метода. Поэтому в приведенном выше случае вы должны вернуть a student объект. Вы можете вернуться null или пустой student объект, если данные не найдены. Ответственность за проверку действительности возвращенного товара лежит на вызывающем абоненте.


Member 14160663

Да, полностью согласен с вашим ответом. Вызывающий объект должен проверить возвращаемое значение.

CPallini

5.

Рейтинг:
2

OriginalGriff

И альтернативой Ричарду - очень точному - предложению является только возврат допустимых значений. Если нет ничего для удаления из очереди, вы создаете исключение:

public Student Dequeue()
   {
   if (size <= 0) throw new ApplicationException("Tried to Dequeue when the Queue was already empty");
   size--;
   return List.RemoveBeginning();
   }


CPallini

5.