В методе возникает ошибка «не все пути кода возвращают значение», но я использовал некоторые операторы if, чтобы охватить весь сценарий - PullRequest
1 голос
/ 10 апреля 2020

Это может быть глупый вопрос, но я просто хочу, чтобы кто-то мог дать лучшее объяснение.

У меня есть метод, определенный ниже:

    private int Test(int i)
    {
        if (i < 0) return -1;
        if (i == 0) return 0;
        if (i > 0) return 1;

        //return 0;        
    }

Это дает мне эту ошибку «не все пути кода возвращают значение».

Я думал, что у меня есть 3 if statement, который может охватить весь сценарий ios (i <0, i == 0, i> 0). Так что это не должно показывать мне эту ошибку.

Ответы [ 3 ]

5 голосов
/ 10 апреля 2020

Компилятор просто не такой умный. Кроме того, ваш код немного неэффективен в том смысле, что он проверяет на определенность (i должен быть больше нуля в последнем случае).

Запишите его как:

private int Test(int i)
{
    if (i < 0) return -1;
    else if (i == 0) return 0;
    else return 1;
}
3 голосов
/ 10 апреля 2020

Во время компиляции компилятор не анализирует условия и понимает, что они охватывают все параметры - он просто видит три несвязанных оператора if и путь без return, если ни один из них не запущен.

Вы можете «понять», используя else if и else s:

private int Test(int i)
{
    if (i < 0) return -1;
    else if (i == 0) return 0;
    else return 1;        
}
0 голосов
/ 10 апреля 2020

Если вы хотите сохранить свой формат, способ сделать это так:

private int Test(int i)
{
   bool result = 1;

   if (i < 0) result = -1;
   if (i == 0) result = 0;
   if (i > 1) result = 1; //This is redundant because i is initialized to 1

   return result;
}
...