Вызывает ошибку при попытке сохранить пустой список - PullRequest
0 голосов
/ 12 октября 2010

Когда пользователь нажимает сохранить и в списке ничего нет, я хочу вызвать ошибку.Я решил использовать блок try catch следующим образом:

try
{
   //when you go to save, and the list box is empty, you should get an error message
   if (dataListBox.Items.Equals(null))
      throw new Exception();

   //i wanted to save on the form_close event, so i put the save data into a method and just call the method from this event 
   this.save();
}
catch (Exception err)
{
   //spits out the errors if there are any
   MessageBox.Show(err.Message, "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Но это не работает для меня.Он все еще сохраняется, и окно сообщений не появляется.

Ответы [ 4 ]

0 голосов
/ 12 октября 2010

Не делай так вообще.Сравните:

try
{
//when you go to save, and the list box is empty, you should get an error message
    if (dataListBox.Items.Count != 0)
        throw new Exception("Please add at least one item to the list.");

    this.save();
}
catch (Exception err)
{
    //spits out the errors if there are any
    MessageBox.Show(err.Message, "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

С:

    if (dataListBox.Items.Count != 0)
    {
        MessageBox.Show("Please add at least one item to the list.", "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        this.save();
    }
  1. Более эффективно не использовать исключения для потока управления.Да, эффективность - это еще не все, но в преждевременной пессимизации также нет смысла.
  2. Сбои валидации не являются исключениями, потому что мы ожидаем их.Если код дошел до точки, где он пытался сохранить, и это было логически невозможно из-за недостатка данных, тогда может быть исключением (но тот, который должен был быть пойман при проверке в более высокомкод - конкретно это код).Если сохранение не удается из-за ошибки файловой системы, ошибки подключения к БД и т. Д., Это исключение.Однако проверка пользователя не является исключением и должна сообщаться как таковая только в том случае, если нам нужно обратиться к более высокому уровню кода (опять же, этот код должен был перехватить его, если это вообще возможно, с помощью механизмов потока управления).
  3. Это облегчает обнаружение логической ошибки.Поскольку мы разделили исключительные и неисключительные случаи, мы видим, что мы не ищем реально возможное исключение.То есть, если пользователь правильно заполнил список, но сохранить его не удалось из-за реального исключения, в заголовке окна сообщения вы скажете «Список пуст», что приведет пользователя в замешательство.Теперь это становится понятнее, и эту ошибку легче исправить:

    if (dataListBox.Items.Count != 0)
    {
        MessageBox.Show("Please add at least one item to the list.", "List Box is empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        try
        {
            this.save();
        }
        catch(Exception ex)
        {
             MessageBox.Show("Saving failed.\n Technical details:\n" + ex.Message, "Saving Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    
0 голосов
/ 12 октября 2010

Вам необходимо проверить:

if(dataListBox.Items.Count ==0)
   throw new Exception();
0 голосов
/ 12 октября 2010

Вместо этого следует использовать .Count ().

if (dataListBox.Items.Count < 1)
    throw new Exception();
0 голосов
/ 12 октября 2010

Попытайтесь добавить это:

if(dataListBox.Items.Count==0)
            throw new Exception();

Кстати, попробуйте здесь определить свой собственный класс Exception, например EmptyListException, тогда вы будете уверены, что поймали именно то, что хотите поймать.Теперь этот код будет показывать тот же MessageBox для исключения, вызванного также в методе «Сохранить».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...