UIAlertController
是一个ValueType,因此您可以保证永远不会在Nullable<T>
上使用空引用,但是以下传递;
Nullable<T>
[Test]
public void ShouldTestNullRef()
{
int? value = null;
IsNull(value).Should().BeTrue(); // Passes
IsNull(new Nullable<int>()).Should().BeTrue(); // passes
}
private bool IsNull<T>(T nullable)
{
return nullable == null;
}
不应该IsNull
总是返回false吗?
这个奇特的编译器魔术吗?
对Nullable的引用:(https://msdn.microsoft.com/en-us/library/b3h38hb0%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)
编辑:
这不同于
Nullable<T>
当我为ReferenceTypes运行IsNull它按预期返回 ,但是当我反编译时,我没有看到该方法的两个版本。我的问题是关于Generics如何处理(可空)结构的差异的潜在实现。例如,Which is preferred: Nullable<>.HasValue or Nullable<> != null?
不知道nullable是结构或值类型。