Ошибка CS0161 C#

150
18 апреля 2022, 12:30

В коде возникает ошибка CS0161(не все пути кода возвращают значение)

Код:

public static string[] GetFilenames(string FolderPath)
{
    string[] FilePaths = Directory.GetFiles(FolderPath);
    string[] FileNames = new string[FilePaths.Length];
    
    for(int i = 0; i < FilePaths.Length; i++)
    {
        FileNames[i] = Path.GetFileName(FilePaths[i]);
        
        if(i == FilePaths.Length - 1)
        {
            return FileNames;
        }
    }
}

Понятно что когда-нибудь условие выполнится, но компилятор не понимает этого.

Answer 1

Можно бросить исключение (которое не будет выброшено никогда), чтобы успокоить компилятор.

for(int i = 0; i < X; i++)
{
    // Код
            
    if(i == X - 1)
    {
        return Value;
    }
}
throw new Exception("Вот сейчас очень неожиданно было");
Answer 2

Честно говоря, непонятно, в чём вообще смысл данного куска кода. Он совершенно равнозначен такому коду (если вы не меняете i и/или X внутри цикла, что было бы очень плохим стилем программирования), при этом компилятор ругаться не будет и читается такой код легче:

for(int i = 0; i < X; i++)
{
    // Код
            
}
return Value;

Но в общем случае компилятор не обязан знать, что у вас будет происходить в процессе работы программы, он просто видит, что если if не сработает, то из функции ничего не вернётся, а поскольку C# строго типизированный язык, вы не можете в одной ветке кода что-то вернуть, а в другой ничего не вернуть. (Хотя, например, язык Python такое допускает, в этом случае в нём вернётся None, но он и не язык со строгой типизацией.)

Так что вам в любом случае надо сделать так, чтобы все ветки кода возвращали значение (либо бросали исключение).

READ ALSO
Какие параметры необходимо поменять при инициализации окна WPF, чтобы canvas внутри элемента webrowser отрисовывался с некоторым шумом?

Какие параметры необходимо поменять при инициализации окна WPF, чтобы canvas внутри элемента webrowser отрисовывался с некоторым шумом?

пробовал добавлять blur в Effect - но это не влияет на значения канвасзначения канвас проверяю на https://browserleaks

127
Выборка графиков и вывод на экран

Выборка графиков и вывод на экран

Есть таблица с полями: Дата начала приема врача Дата окончания приема врача (В этих полях храниться время на каждый день): Понедельник Вторник...

152
Задать рамки для изменения размера

Задать рамки для изменения размера

У меня скрипт рандомно должен менять модельку, и вот когда я начал писать код Понял что переменная типа floаt может содержать только лишь 1 значание,...

109
Как увеличить переменную long money

Как увеличить переменную long money

У меня есть переменная: public long money; В неё может вместиться максимум 1000000000000000000 или 1Q Мне этого не хватает, можно как-то её увеличить?

142