我正在创建一个新对象
myobject t = new myobject();
如果新的成功,我应该检查下一行的空引用吗?
if (null != t)
或者我可以肯定这个对象肯定会与null不同......
感谢。
答案 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()
永远不会返回null
(Nullable<T>
除外)。这两个反案例都讨论得更多here。
但要重申:不,不要检查null
的结果,除非你有理由怀疑某人真的,真的很愚蠢。
答案 2 :(得分:3)
new
运算符用于为类的新实例分配内存。使用new
进行实例化可以在“正常”场景中(对于边缘情况参见Marc's answer),假设内存已成功分配,则永远不会导致null。
如果对象创建失败,因为它的构造函数抛出异常或无法分配内存,则该语句之后的代码将不会执行。因此,即使对象为null并且您尝试检查,也不会进行检查。您将使用try-catch块来处理异常。
答案 3 :(得分:1)
不,没有必要检查一下。
答案 4 :(得分:0)
跳过空检查 - 唯一不会创建对象的情况是构造函数中的异常。