我的比较结果false符合预期
bool eq = typeof(int?).Equals(typeof(int));
Run Code Online (Sandbox Code Playgroud)
现在我有这个代码
List<object> items = new List<object>() { (int?)123 };
int result = items.OfType<int>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但这会返回123-无论如何该值是类型int?
怎么会这样?
Mar*_*ell 59
可空类型具有特殊的“装箱”规则;object根据您的代码,“装箱”是将值类型视为时。不同于常规值的类型,可为空值型是盒装要么作为null(规则null,无型),或作为非可空型(T中T?)。因此:将an int?装箱为int,而不是int?。然后,当你使用OfType<int>()它,你会得到所有的值int,它是:单值,你传递,因为它是类型int。
以下规则将可空值类型装箱
HasValue返回false,则产生空引用。HasValue返回true,则将基础值类型的T值装箱,而不是可为null的实例。在您的示例中,遵循第二条规则,因为您具有价值:
var i = (object)(int?)123;
Run Code Online (Sandbox Code Playgroud)