在创建对象后检查null

时间:2011-04-08 10:27:20

标签: c# .net

我正在创建一个新对象

myobject t = new myobject();

如果新的成功,我应该检查下一行的空引用吗?

if (null != t)

或者我可以肯定这个对象肯定会与null不同......

感谢。

5 个答案:

答案 0 :(得分:11)

根据the C# documentation,如果new无法为新对象实例成功分配空间,则会抛出OutOfMemoryException。因此,无需对null进行明确检查。

如果您尝试检测new未能分配新对象的情况,您可能希望执行以下操作:

try {
    myobject t = new myobject();
    //do stuff with 't'
}
catch (OutOfMemoryException e) {
    //handle the error (careful, you've run out of heap space!)
}

答案 1 :(得分:11)

这实际上取决于你需要多少防范病态愚蠢的代码; p以下new()(针对一个类)将返回null

MyFunnyType obj = new MyFunnyType();

使用:

class MyFunnyProxyAttribute : System.Runtime.Remoting.Proxies.ProxyAttribute {
   public override MarshalByRefObject CreateInstance(Type serverType) {
      return null;
   }
}
[MyFunnyProxy]
class MyFunnyType : ContextBoundObject { }
谢天谢地,你确实需要走很远的路才能获得这种疯狂的感觉。在任何理智的代码中,new()永远不会返回nullNullable<T>除外)。这两个反案例都讨论得更多here

但要重申:不,不要检查null的结果,除非你有理由怀疑某人真的,真的很愚蠢。

答案 2 :(得分:3)

new运算符用于为类的新实例分配内存。使用new进行实例化可以在“正常”场景中(对于边缘情况参见Marc's answer),假设内存已成功分配,则永远不会导致null。

如果对象创建失败,因为它的构造函数抛出异常或无法分配内存,则该语句之后的代码将不会执行。因此,即使对象为null并且您尝试检查,也不会进行检查。您将使用try-catch块来处理异常。

答案 3 :(得分:1)

不,没有必要检查一下。

答案 4 :(得分:0)

跳过空检查 - 唯一不会创建对象的情况是构造函数中的异常。