当前位置:  开发笔记 > 编程语言 > 正文

检查C#new()初始化为null?

如何解决《检查C#new()初始化为null?》经验,为你挑选了2个好方法。

我在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只能被异常中止,在这种情况下永远不会达到断言.



1> arul..:

ServiceProvider可能会覆盖!=/==运算符,因此对于无效状态,与null的比较将返回true.

无论如何看起来很奇怪



2> Marc Gravell..:

如果是工厂方法,我会期望"测试为空"模式更多 - 即

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();
}

这更是涵盖在这里.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有