Почему это ошибка времени компиляции?
Проблема в том, что каждая возможная комбинация типов значений имеет различные правила для того, что означает приведение.Приведение 64-битного двойного к 16-битному целому - это совершенно другой код, от преобразования десятичного числа к плавающему и так далее.Количество возможностей огромно.Так что думай как компилятор. Какой код должен сгенерировать компилятор для вашей программы?
Компилятор должен будет сгенерировать код, который снова запускает компилятор во время выполнения, выполняет новый анализ типов,и динамически генерирует соответствующий код .
Возможно, это больше работы и меньше производительности, чем вы ожидаете получить с помощью дженериков, поэтому мы просто запрещаем его.Если вы действительно хотите, чтобы компилятор снова запустился и провел анализ типов, используйте «динамический» в C # 4;это то, что он делает.
И почему это ошибка времени выполнения?
По той же причине.
Штриховка int может быть распакована только в int (или int?) По той же причине, что и выше;если CLR пытается выполнить все возможные преобразования из упакованного в тип значения в любой другой возможный тип значения, то по существу он должен снова запустить компилятор во время выполнения .Это было бы неожиданно медленно.
Так почему же это не ошибка для ссылочных типов?
Поскольку каждое преобразование ссылочного типа совпадает с любой другой ссылкойпреобразование типа : вы запрашиваете объект, чтобы определить, является ли он производным от заданного типа или идентичен ему.Если это не так, вы генерируете исключение (если выполняете приведение) или приводите к нулевому / ложному (если используете операторы "как / есть").Правила согласуются для ссылочных типов так, как они не относятся к типам значений.Помните, ссылочные типы знают свой собственный тип .Типы значений не имеют;с типами значений переменная, выполняющая хранение, является единственной вещью, которая знает семантику типов, которая применяется к этим битам .Типы значений содержат свои значения и не содержат никакой дополнительной информации .Типы ссылок содержат свои значения и множество дополнительных данных.
Для получения дополнительной информации см. Мою статью на эту тему:
http://ericlippert.com/2009/03/03/representation-and-identity/