Ошибка CS0161 C#

В коде возникает ошибка 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;
        }
    }
}

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


Ответы (2 шт):

Автор решения: CrazyElf

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

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

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

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

→ Ссылка
Автор решения: aepot

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

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