В дополнение к "int?" будучи ярлыком для «Nullable», в CLR была также добавлена инфраструктура для неявного и бесшумного преобразования между «int?» и "int". Это также означает, что любая операция бокса неявно будет упаковывать фактическое значение (т. Е. Нельзя пометить Nullable как Nullable, это всегда приводит к упакованному значению T или пустому объекту).
Я столкнулся со многими из этих проблем при попытке создать Nullable, когда вы не знаете T во время компиляции (вы знаете это только во время выполнения). http://bradwilson.typepad.com/blog/2008/07/creating-nullab.html