int?の正体はNullable<int>という値型
構造体はnullにはならない
まるでnullのように見せかけているだけ

int?x=null;
x.ToString();

これは一見するとヌルポだがnullじゃないのでこれは通る
nullにならない値型なのでいちいちこの場所ではnullになりませんとは言わない

x.GetType();
はヌルポになる
なぜか?
GetTypeの呼び出しはobjectへのbox化のあとに行われる
nullのように見えているだけのxはbox化されて本物のnullになる
GetTypeを呼んでるところだけ本物のnullになってるのでIDEは正確に警告を出す