在创建对象后检查null

Nig*_*ker 6 .net c#

我正在创建一个新对象

myobject t = new myobject();
Run Code Online (Sandbox Code Playgroud)

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

if (null != t)
Run Code Online (Sandbox Code Playgroud)

或者我可以确定这个对象肯定会有所不同,然后是null ...

谢谢.

aro*_*oth 11

根据C#文档,如果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!)
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在较新版本的CLR中,您无法真正处理OOMException.你可以处理它,但它会被自动重新抛出.这基本上是一个致命的例外. (2认同)

Mar*_*ell 11

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

MyFunnyType obj = new MyFunnyType();
Run Code Online (Sandbox Code Playgroud)

有:

class MyFunnyProxyAttribute : System.Runtime.Remoting.Proxies.ProxyAttribute {
   public override MarshalByRefObject CreateInstance(Type serverType) {
      return null;
   }
}
[MyFunnyProxy]
class MyFunnyType : ContextBoundObject { }
Run Code Online (Sandbox Code Playgroud)

谢天谢地,你需要走很远的路,才能获得这种疯狂.在任何理智的代码中,new()永远不会返回null(除了Nullable<T>).这两个反案例都在这里讨论得更多.

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