В коде возникает ошибка 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;
}
}
}
Понятно что когда-нибудь условие выполнится, но компилятор не понимает этого.
Можно бросить исключение (которое не будет выброшено никогда), чтобы успокоить компилятор.
for(int i = 0; i < X; i++)
{
// Код
if(i == X - 1)
{
return Value;
}
}
throw new Exception("Вот сейчас очень неожиданно было");
Честно говоря, непонятно, в чём вообще смысл данного куска кода. Он совершенно равнозначен такому коду (если вы не меняете i и/или X внутри цикла, что было бы очень плохим стилем программирования), при этом компилятор ругаться не будет и читается такой код легче:
for(int i = 0; i < X; i++)
{
// Код
}
return Value;
Но в общем случае компилятор не обязан знать, что у вас будет происходить в процессе работы программы, он просто видит, что если if не сработает, то из функции ничего не вернётся, а поскольку C# строго типизированный язык, вы не можете в одной ветке кода что-то вернуть, а в другой ничего не вернуть. (Хотя, например, язык Python такое допускает, в этом случае в нём вернётся None, но он и не язык со строгой типизацией.)
Так что вам в любом случае надо сделать так, чтобы все ветки кода возвращали значение (либо бросали исключение).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей