Обработка ошибок в свойствах, я знаю, что это плохо, нужно исправить, хотя - PullRequest
2 голосов
/ 11 марта 2011

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

У меня есть вид сетки, где пользователю разрешено изменять ячейку 2 на любое значение (символ), но если пользователь вводит что-то большее, чем символ, это выдаст ошибку, лучше ли мне как-то просто проверить вид сетки?

Кажется, я немного сталкиваюсь с этой проблемой, когда у меня есть свойства или даже методы, которые возвращают тип, я не могу приступить к обработке ошибок, не выполнив попытку catch (или TryParse) и если он возвращает тип неправильно но пусто.

public char WeightClass
{
   get
      {
         return Convert.ToChar(gvFighters.Rows[rowNumber].Cells[2].Value);
      }
}

РЕДАКТИРОВАТЬ: если бы вы могли предоставить некоторые дополнительные чтения для практики кода, что также было бы плюсом прочитать большую часть кода завершено ....

EDIT

   public char FlightClassFromRow()
            {   
                char result;
                if(Char.TryParse(gvSegments.Rows[rowNumber].Cells[2].Value.ToString(),out result))
                {
                    return result;
                }
     //if false, return empty char? is that the best way?
            }

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Нет необходимости в попытке поймать.

  • Проверьте, меньше ли число строк и столбцов, чем количество строк / столбцов
  • Использовать Char.TryParse

Но если свойство делает больше, чем просто возврат, лучше просто использовать метод.

0 голосов
/ 11 марта 2011

Вот пример реализации с использованием перечисленного перечисления:

    private static WeightClass WeightClassFromRow(DataGridView gvSegments, int rowNumber)
    {
        return WeightClassFromChar(gvSegments.Rows[rowNumber].Cells[SegmentColumns.WeightClass].Value as string);
    }

    private static WeightClass WeightClassFromChar(string weightClassString)
    {
        if (string.IsNullOrEmpty(weightClassString))
            return WeightClass.None;
        switch (weightClassString[0])
        {
            case 'H':
                return WeightClass.Heaveyweight;
            case 'L':
                return WeightClass.Lightweight;
            default:
                return WeightClass.None;
        }
    }
...