Каково значение оператора возврата в процедуре типа void - PullRequest
0 голосов
/ 08 февраля 2011

Есть ли какое-либо значение для оператора возврата в недействительной процедуре.

У меня был сценарий, в котором я использую COM-взаимодействие, и поведение во время выполнения было странным. Код выполняется нормально, когда я отлаживаю с помощью Visual Studio, но он плохо себя ведет при выполнении из exe. Никаких исключений не выбрасывается в любом случае. Мой код был примерно таким.

private void function1()
{
                DialogResult dialogResult = MessageBox.Show(messageInfo.DisplayText, GlobalData.MessageCaption, MessageBoxButtons.OKCancel);
                if (dialogResult == DialogResult.OK)
                {
                    minSize = (int)numericUpdown.Value;
                    return;
                }
                else
                {
                    minSize = sampleSize;
                    return; //This is the return statement in question
                }
}

Проблема была решена, когда я добавил инструкцию return в блоке else [Нет никаких строк после оператора return.]. Я подтвердил, неоднократно проверяя проблему с оператором return и без него, и теперь не понимаю, что именно происходит.

Имеет ли это какие-либо изменения в поведении приложения.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Метод вернется и любой оставшийся код не будет выполнен.Однако это зависит от нескольких вещей, например, от того, находится ли возврат в блоке using или try-catch - поскольку некоторые вещи выполняются, даже если вы явно возвращаете.

Пустые типы возврата просто не могут ничего вернуть.

Что касается вашей странной проблемы, если предположить, что код целиком соответствует тому, что вы опубликовали, то возврат не сделает ничего особенного.Я могу только догадываться, что вы не опубликовали весь код, а это значит, что возвращение может что-то делать (например, остановить запуск кода duff).

0 голосов
/ 08 февраля 2011

Я также заметил различное поведение при отладке и при отсутствии отладки, также с COM, в System.DirectoryServices.

Кажется, что другое поведение как-то связано с COM.

ИМХО, это либо компилятор, либо ошибка времени выполнения.

...