Это невозможно встроенным способом, используя простой язык, например int<5000,20000>
.
Хотя это возможно с более сложным определением, это не легко. Трудно определить и определить всю семантику, которую вы хотите, например:
- Преобразование в другие типы дальнего боя
- Преобразование из встроенных числовых типов
- Что должно произойти при переполнении / недостаточном потоке
- Каким должен быть диапазон результирующего типа после выполнения арифметики
Такое решение также не будет охватывать случаи, когда вы хотите, чтобы диапазон типов одного параметра был ограничен на основе значения другого параметра.
Альтернативой может быть использование что-то вроде Code Contracts
для определения контрактов для вашего кода, чтобы вы могли выполнять произвольные статические проверки (во время компиляции).
Редактировать : Удалена ссылка на SpecSharp. Похоже, его заменили кодовыми контрактами ...