Подскажите, пожалуйста, как избежать ошибки "не все пути к коду возвращают значение"?

Задание - написать взлом шифра Цезаря методом полного перебора, разработав оконное приложение. В данной функции, которая в элемент textBox2 должна выводить варианты расшифровки, выскакивает озвученная ошибка.

public string CodeEncode(string text)
{

    string alfphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";

    int m = alfphabet.Length;

    List<string> result = new List<string>();
    for (int y = 1; y < 32; y++)
    {
        result.Add(Shift(text, alfphabet, y));
    }
    int i = 0;
    foreach (var word in result)
    {
        i++;
        return "Попытка расшифровки №:" + i + " " + word;
    }
}

static string Shift(string targetWord, string alfphabet, int key)
{
    string result = string.Empty;
    for (int i = 0; i < targetWord.Length; i++)
    {
        for (int j = 0; j < alfphabet.Length; j++)
        {
            if (targetWord[i] == alfphabet[j])
            {
                int temp = j + key;

                while (temp >= alfphabet.Length)
                    temp -= alfphabet.Length;

                result += alfphabet[temp];
            }
        }
    }
    return result;
}

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

Автор решения: S.H.

Всё очень просто.

Вот у Вас есть функция public string CodeEncode(string text). Она по своей сигнатуре должна вернуть строку. Но какой либо возврат у Вас происходит только внутри foreach (var word in result) - то есть, если цикл ни разу не выполнится - функция ничего не вернет.

Лучше напишите так, как во второй функции, где вы сразу заводите переменную, кторую будете возвращать, инициализируете еёё пустой строкой, а в конце - просто делате return <имя переменной>.

Кстати, похоже, что всё таки первая функция написана с ошибкой. Помому что если там написано return "Попытка расшифровки №:" + i + " " + word; - то в этом месте произойдёт возврат из функции, и дальше ничего выполняться не будет.

Думаю, что правильно записывать фразу "Попытка расшифровки #" прямо в текстбокс, хотя и здесь будут некотрые трудности, связанные с потоками (а именно - у приложения есть всего один поток, занимающийся отрисовкой. Если в нём же выполняется долгая операция - то он будет занят, и всё-всё напишет в текстбокс только в самом конце)

Но для шифра Цезаря - вроде должно нормально работать!

→ Ссылка