我在Koders上找到了这段代码:
private ServiceProvider SiteServiceProvider { get { if (serviceProvider == null) { serviceProvider = new ServiceProvider(site as VSOLE.IServiceProvider); Debug.Assert(serviceProvider != null, "Unable to get ServiceProvider from site object."); } return serviceProvider; } }
我想知道,有什么可能Debug.Assert(serviceProvider != null
触发的方式吗?我的印象是new
只能被异常中止,在这种情况下永远不会达到断言.
ServiceProvider可能会覆盖!=/==运算符,因此对于无效状态,与null的比较将返回true.
无论如何看起来很奇怪
如果是工厂方法,我会期望"测试为空"模式更多 - 即
SomeType provider = SomeFactory.CreateProvider(); if(provider == null) // damn!! no factory implementation loaded... { etc }
还有一个值得了解的案例,但这里不适用(因为我们知道我们正在创建的类型)... Nullable
; 这主要是泛型问题:
static void Test() where T : new() { T x = new T(); if (x == null) Console.WriteLine("wtf?"); } static void Main() { Test (); }
这更是涵盖在这里.