Как правильно ограничить диапазон значений, которые будет принимать свойство? - PullRequest
3 голосов
/ 04 февраля 2012

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

private int markerwidth = 2;
[DefaultValue(2), Category("Appearance"), Description("Size of position marker")]
public int MarkerWidth
{
    get
    {
        return this.markerwidth;
    }
    set
    {
        if (value > 0 && value <= MAXMARKERWIDTH)
        {
            this.markerwidth = value;
        }
    }
}

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

В отличие от этого, свойство TabValue (унаследованное от UserControl) жалуетсяесли я попытаюсь установить отрицательное значение во время разработки (и предположительно во время выполнения).

Если это достигнуто с нормальным исключением?Или есть лучший способ?Атрибут может быть?

Ответы [ 2 ]

6 голосов
/ 04 февраля 2012

Самый оптимальный способ - достичь с помощью исключения.Просто продолжайте свой код

    if (value > 0 && value <= MAXMARKERWIDTH)
    {
        this.markerwidth = value;
    }
    else 
    {
        throw new ArgumentOutOfRangeException("Invalid value. Value must be between 0 and " + MAXMARKERWIDTH.ToString());
    }

РЕДАКТИРОВАТЬ

Да, Wiktor Zychla абсолютно прав!Я исправил ответ.

2 голосов
/ 04 февраля 2012

Есть встроенный ArgumentOutOfRangeException, я думаю, он подходит здесь.

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