以下是拆箱前检查的两种常用方法。
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
另外,我想知道为什么 C# 调用System.Type.op_Equality
而ceq
不是引用相等检查吗?
更新
其实还有第三种方式。(简而言之,来自 C# 5.0)
MyValueType? x = myObject as MyValueType?;
然后检查x.HasValue
并使用x.Value
您会使用这 3 个中的哪一个?