не все пути к коду возвращают значение unity
Не все ветви кода возвращают значение
CS0161 «Program.Calculate(string, int, int)»: не все ветви кода возвращают значение. ConsoleApp1 C:\Users\денис\source\repos\calculateoncsharp\ConsoleApp1\Program.cs
3 ответа 3
Перехватывать исключение и выводить сообщение об ошибке будет вызывающая сторона:
Метод в любом случае должен возвращает значение типа int. В ветке default ничего не возвращается, поэтому и ошибка.
В default надо возвращать какое-то значение типа int, которое возвращает функция
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.8.40416
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
c# returning error » не все пути кода возвращают значение»
Я пытаюсь написать код, который возвращает, делится ли данное целое число равномерно на 1 до 20,
но я продолжаю получать следующее сообщение об ошибке:
ошибка CS0161: ‘ProblemFive.isTwenty (int)’: не все пути кода возвращают значение
8 ответов
вы пропускаете return заявление.
компилятор не получает сложную логику, в которой вы возвращаетесь в последней итерации цикла, поэтому он думает, что вы можете выйти из цикла и в конечном итоге ничего не возвращать.
вместо того, чтобы возвращаться в последней итерации, просто верните true после цикла:
Я также испытал эту проблему и нашел простое решение быть
Это также работает с другими типами возврата и дает наименьшее количество проблем
начальное значение, которое я выбрал, было резервным значением, и я смог повторно назначить значение столько раз, сколько требуется.
или просто сделайте это:
Мне нравится бить мертвых лошадей, но я просто хотел сделать дополнительный момент:
прежде всего, проблема в том, что не все условия вашей структуры управления были рассмотрены. По сути, вы говорите, если a, то это, иначе если b, то это. Конец. Но что если нет? Выхода нет (т. е. не каждый «путь» возвращает значение).
мой дополнительный момент заключается в том, что это пример того, почему вы должны стремиться к одному выходу, если это возможно. В этом примере вы сделал бы что-то вроде этого:
Итак, здесь вы всегда оператор return и метод всегда выходит в одном месте. Пару вещей, чтобы рассмотреть. вы должны убедиться, что ваше значение выхода действительно на каждом пути или, по крайней мере, приемлемо. Например, эта структура решений учитывает только три возможности, но единственный выход может также выступать в качестве окончательного утверждения else. Или нет? Необходимо убедиться, что конечное возвращаемое значение допустимо для всех путей. Это гораздо лучший способ приблизиться к нему по сравнению с 50 миллионами точек выхода.
взгляните на это. Это тернарный оператор в C#.
Это просто, чтобы показать принцип; вы можете вернуть True или False (или даже целое число или строку) в зависимости от результата чего-то в левой части вопросительного знака. Хороший оператор.
три варианта вместе:
Это должно работать, иначе я получил ошибку, что не все кодовые пути возвращают значение. Поэтому я устанавливаю результат как возвращаемое значение, которое устанавливается как B или A в зависимости от того, что true
Я получил эту ошибку при попытке открыть проект VS 2017 в VS 2015. Конечно, решение должно было открыться в 2017 году.
c # возвращает ошибку «не все пути кода возвращают значение»
Я пытаюсь написать код, который возвращает, делится ли данное целое равномерно на 1-20,
но я продолжаю получать следующую ошибку:
error CS0161: ‘ProblemFive.isTwenty(int)’: не все пути кода возвращают значение
8 ответов
Компилятор не получает сложную логику, в которой вы возвращаетесь в последней итерации цикла, поэтому он думает, что вы можете выйти из цикла и в конечном итоге ничего не вернуть.
Вместо возврата в последнюю итерацию просто верните true после цикла:
Я также испытал эту проблему и нашел легкое решение
Это также работает с другими типами возвращаемых данных и дает наименьшее количество проблем
Исходное значение, которое я выбрал, было значением спада, и я смог повторно назначить значение столько раз, сколько требуется.
Или просто сделайте это:
Мне нравится бить мертвых лошадей, но я просто хотел сделать дополнительную мысль:
Прежде всего, проблема заключается в том, что не все условия вашей структуры управления были устранены. По сути, вы говорите, если a, то это, иначе, если b, то это. Конец. Но что, если и нет? Невозможно выйти (т.е. Не каждый «путь» возвращает значение).
Мое дополнительное замечание состоит в том, что это пример того, почему вы должны стремиться к одному выходу, если это возможно. В этом примере вы сделали бы что-то вроде этого:
Итак, здесь всегда есть оператор return, и метод всегда выходит в одном месте. Несколько вещей, которые следует учитывать, хотя. вам нужно убедиться, что ваше значение выхода действительно на каждом пути или, по крайней мере, приемлемо. Например, эта структура принятия решений учитывает только три возможности, но единственный выход также может выступать в качестве вашего последнего заявления. Или это? Вы должны убедиться, что окончательное возвращаемое значение действительно для всех путей. Это гораздо лучший способ приблизиться к ней, имея 50 миллионов точек выхода.
Причина ошибки CS0161: не все пути кода возвращают значение
Я сделал основной метод расширения, чтобы добавить функциональность повтора в мой HttpClient.PostAsync :
приведенный выше код дает мне следующую ошибку:
ошибка CS0161 ‘ HttpClientExtensions.PostWithRetryAsync (HttpClient, Uri, HttpContent, int, Action)’: не все пути кода возвращают значение.
если я добавить throw new InvalidOperationException() в конце (или return null Если на то пошло), ошибка уходит, как и ожидалось. Что я действительно хотел бы знать: есть ли код путь, который фактически выходит из этого метода без возвращаемого значения или исключения? Я его не вижу. Знаю ли я больше, чем компилятор в этом случае, или наоборот?
4 ответов
простая причина заключается в том, что компилятор должен иметь возможность статически проверить все пути потока выполнения заканчиваются инструкцией return (или исключением).
так в основном компилятор должен проверить эти вещи:
компилятор просто не в состоянии проверить это.
давайте попробуем очень простой пример:
этот тривиальный пример будет генерировать тот же ошибка:
CS0161 ‘ Test ()’: не все пути кода возвращают значение
таким образом, компилятор не может вывести это из-за этих фактов:
затем код всегда будет возвращать значение 10.
теперь посмотрите на этот пример:
весь while цикл и локальная переменная исчезли, все осталось только это:
так ясно, что компилятор не посмотрите на значения переменных, когда он статически анализирует эти вещи. Стоимость реализации этой функции и ее правильного использования, вероятно, перевешивает эффект или обратную сторону не делать этого. Запомните это » каждая функция начинается в отверстии на 100 пунктов, что означает, что она должна иметь значительный чистый положительный эффект на общий пакет, чтобы он попал в язык.».
да, это определенно тот случай, когда вы знаете больше о чем компилятор.
просто для полноты, давайте посмотрим на все способы вашего кода может течь:
таким образом, в принципе, можно сказать, что этот код всегда заканчивается либо исключением, либо возвращением, но компилятор не может статически проверить это.
теперь управление потоком выглядит это:
даже этот метод будет составлять:
Если он бросает HttpRequestException и блок catch выполняется, он может пропустить бросить оператор в зависимости от условия (попытка > maxAttempts), чтобы этот путь ничего не возвращал.
но если вы хотите продолжить цикл, вам нужно вернуться в конце:
as Error заявляет, что not all code paths return a value вы не возвращаете значение для каждого пути кода
вы должны создать исключение или вернуть значение
вы можете изменить свой код, чтобы весь путь кода возвращал значение. код должен быть примерно таким
Почему» не все пути кода возвращают значение » с помощью оператора switch и перечисления?
у меня есть следующий код:
5 ответов
нет ничего, чтобы сказать, что значение myEnum будет одним из этих значений.
не принимайте перечисления за ограничительный набор значений. Это просто имени набор значений. Например, я мог бы вызвать ваш метод с помощью:
что бы вы хотели, что делать? Если вы хотите, чтобы бросить исключение, вы можете сделать это в случае по умолчанию:
в качестве альтернативы вы можете использовать Enum.IsDefined авансом, если вы хотите чтобы выполнить другую работу до оператора switch. В этом недостаток бокса. есть несколько способов обойти это, но они, как правило, больше работы.
это предполагает, что есть очевидно связь между базовыми значениями в MyEnum и значение, которое вы хотите вернуть.
перечислений не ограничиваются значениями, которые они представляют. Вы можете назначить это:
и не было бы никаких проблем вообще. Добавьте значение по умолчанию к коммутатору, и вы будете обрабатывать все возможные ситуации.
Если вы измените значения в своем перечислении (добавив четвертый), ваш код сломается. В оператор switch следует добавить значение по умолчанию: case.
а затем приведите свое перечисление как int в коде. Вместо int myInt = Method(myEnumValue); можно использовать int myInt = (int)myEnum
по умолчанию всегда 0 и неявно конвертируется, даже если у вас нет одного со значением 0.