В С# есть что-то, чего я не могу понять. Вы можете вывести вне диапазона int
в enum
, и компилятор не дрогнет. Представьте себе этот enum
:
enum Colour
{
Red = 1,
Green = 2,
Blue = 3
}
Теперь, если вы пишете:
Colour eco;
eco = (Colour)17;
Компилятор считает, что все в порядке. И время исполнения тоже. Мм?
Почему команда С# решила сделать это возможным? Это решение не подходит для использования перечислений, я думаю, в таких сценариях, как это:
void DoSomethingWithColour(Colour eco)
{
//do something to eco.
}
В синтаксическом языке, таком как С#, я хотел бы предположить, что eco
всегда будет иметь юридическое значение Colour
. Но это не так. Программист мог вызвать мой метод со значением 17, назначенным eco
(как в предыдущем фрагменте кода), поэтому код в моем методе не должен предполагать, что eco
содержит юридическое значение Colour
. Мне нужно проверить его явно и обрабатывать исключительные значения, как мне заблагорассудится. Почему это?
По моему скромному мнению, было бы намного лучше, если компилятор выдал сообщение об ошибке (или даже предупреждение) при выдаче вне диапазона int
в enum
, если известно значение int
во время компиляции. В противном случае среда выполнения должна генерировать исключение в инструкции присваивания.
Как вы думаете? Есть ли причина, почему это так?
(Примечание. Это вопрос Я отправил много веков назад в мой блог, но не получил информативного ответа.)