The reason is simple: if you cast to an object, the information that it was once nullable is gone forever. Think about it for a while, it's quite logical.
The only valid reason for wanting to know it is nullable is if you have a generic method. Then the solution is to use typeof(T) (C#) or GetType(T) (VB)
where T is your generic type parameter.