以下は、箱から出す前に確認するためによく使用される 2 つの方法です。
myObject.GetType() == typeof(MyValueType)
IL_0001: callvirt System.Object.GetType
IL_0006: ldtoken UserQuery.MyValueType
IL_000B: call System.Type.GetTypeFromHandle
IL_0010: call System.Type.op_Equality
myObject is MyValueType
IL_0001: isinst UserQuery.MyValueType
さらに、 Isn't that reference equality check?System.Type.op_Equality
の代わりにC# が呼び出される理由が気になります。ceq
アップデート
実は、第3の方法があります。(一言で言えばC#5.0から)
MyValueType? x = myObject as MyValueType?;
次に、確認x.HasValue
して使用しますx.Value
3つのうちどれを使う?