代码之家  ›  专栏  ›  技术社区  ›  Paolo Tedesco

对空对象使用语句

  •  155
  • Paolo Tedesco  · 技术社区  · 15 年前

    使用 using 关于(潜在的)空对象的语句?
    请考虑以下示例:

    class Test {
        IDisposable GetObject(string name) {
            // returns null if not found
        }
    
        void DoSomething() {
            using (IDisposable x = GetObject("invalid name")) {
                if (x != null) {
                     // etc...
                }
            }
        }
    }
    

    有保证吗 Dispose 只有当对象不为空时才会调用,并且我将不会获得 NullReferenceException ?

    5 回复  |  直到 9 年前
        1
  •  144
  •   BartoszKP    9 年前

    对, Dispose() 仅对非空对象调用:

    http://msdn.microsoft.com/en-us/library/yh598w02.aspx

        2
  •  28
  •   Andriy Volkov    11 年前

    扩展 using 检查对象是否 null 打电话之前 Dispose 在上面,所以是的,它是安全的。

    在你的情况下,你会得到如下信息:

    IDisposable x = GetObject("invalid name");
    try
    {
        // etc...
    }
    finally
    {
        if(x != null)
        {
            x.Dispose();
        }
    }
    
        3
  •  11
  •   Darin Dimitrov    15 年前

    你应该没问题:

    using ((IDisposable)null) { }
    

    这里没有抛出异常。

    旁注:不要误会 foreach IEnumerable 将抛出异常的位置。

        4
  •  1
  •   oli    15 年前

    是的,在处理引用之前,将检查空值。您可以通过在reflector中查看代码来检查自己。

        5
  •  -3
  •   malay    15 年前

    根据我的经验,您不会得到空引用异常。它将被忽略。