Ранжированные целые числа в .NET (или C #) - PullRequest
3 голосов
/ 08 марта 2010

Я слепой или .NET Framework не предоставляет какой-либо класс целочисленных значений в диапазоне? То есть тип, который не позволит вам установить значение вне некоторых заданных границ, которые не являются полным диапазоном базового типа данных. Например, целочисленный тип, который ограничивал бы его значения от 1 до 100. Показывая мой возраст здесь, но в далеком 93 году я помню, что использовал такие вещи в Modula-2 (э-э-э!), Но я не видел явная поддержка фреймворка / языка с тех пор.

Я просто что-то упустил, или это случай "настолько просто сделать свой собственный, что фреймворк не беспокоит"?

Приветствие.

Ответы [ 3 ]

2 голосов
/ 08 марта 2010

Они не запечены, как дизайн Эйфелевой, по контракту, но вы можете сделать свой собственный. Для C # 3.5 и более ранних версий есть Spec # .

Для C # 4.0, они ввели CodeContract s (но, похоже, в расширениях BCL).

1 голос
/ 08 марта 2010

Вы ничего не пропускаете - если перечисления не соответствуют вашему случаю 1) - этого не существует. Бросай свой.


1) И обратите внимание, что перечисления на самом деле не приводят в исполнение действительное значение перечисления, поскольку это исключает использование перечислений для комбинированных флагов.

1 голос
/ 08 марта 2010

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

Без свойств это было бы гораздо полезнее. Тем не менее, так как вы можете сделать:

private int myRangedIntValue;
public int MyRangedIntValue
{
    get { return myRangedIntValue; }
    set 
    { 
        myRangedIntValue = Math.Max(1, Math.Min(100, value));
    }
}

Преимущества пользовательского типа уменьшаются. Оставляя стандартные типы int, вы получаете гораздо меньше типов для компиляции, связывания данных и т. Д.

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