C #: Почему этот код игнорируется? - PullRequest
1 голос
/ 14 сентября 2009

Извините за странное название вопроса, но я не знаю, как это назвать. Это просто не имеет смысла для меня. Вот код:

public partial class ParameterPanel : FlowLayoutPanel
{
    ...

    public void SetContents(IEnumerable<IParameter> parameters)
    {
        if (parameters == null || !parameters.Any())
            return;

        SuspendLayout();
        Controls.Clear();

        foreach (IParameter parameter in parameters)
        {
            Control control = Factory.Create(parameter);
            Controls.Add(control);
        }

        Console.WriteLine("???");

        ResumeLayout(false);
        PerformLayout();
    }
}

Странная вещь в том, что код иногда никогда не доходит до Console.WriteLine Я ломаю начало метода и пытаюсь пройтись по нему. Он входит в цикл foreach, но после последнего элемента метод просто возвращает ?? Оно никогда не достигает Console.WriteLine. И я просто не понимаю ... Как это вообще возможно? И самое странное, что это происходит не всегда. Но это происходит последовательно в тех случаях, когда это происходит.

Кто-нибудь знает, что здесь происходит? Я даже не знаю, где начать искать эту ошибку.

Ответы [ 5 ]

4 голосов
/ 14 сентября 2009

Если что-то в методе вызывает исключение, остальная часть метода будет пропущена.

Нажмите Отладка-> Исключения и установите флажок для исключений CLR, чтобы VS прерывался, как только выдается исключение.

1 голос
/ 14 сентября 2009

Одна странность: если parameters равно нулю или пусто, вы никогда не возобновите или не выполняете макет ... Я знаю, что это не та ситуация, с которой вы столкнулись, но это что-то, что нужно исправить.

Другая возможность заключается в том, что где-то в цикле создается исключение.

0 голосов
/ 02 ноября 2009

Как говорит Джон Скит, строка -

if (parameters == null || !parameters.Any()) return;

возвращает функцию, поэтому в этом случае вы никогда не получите дальше. Обычно такой контракт применяется в начале метода, но в этом случае обычно выдается исключение.

0 голосов
/ 14 сентября 2009

Может произойти исключение в foreach, попробуйте проверить Debug-> Exceptions-> исключения языка времени выполнения, чтобы увидеть, есть ли исключение или нет

0 голосов
/ 14 сентября 2009

Добавить проверку, если элемент управления успешно создан, если нет, то пропустить добавление.

foreach (IParameter parameter in parameters)
{
    Control control = Factory.Create(parameter);
    if (control!=null) {
        Controls.Add(control);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...