我正在创建一个新对象。
myobject t = new myobject();
如果new成功了,我应该检查下一行是否为null引用吗?
if (null != t)
我可以确定这个对象一定会与null不同...
谢谢。
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!)
}
这实际上取决于你需要保护自己免受病态愚蠢的代码的程度;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>
)。这两种反例在此处有更详细的讨论。
但要再次强调:如果没有理由怀疑某人真的很傻,就不要检查结果是否为 null
。
new
运算符用于为一个类的新实例分配内存。使用new
进行实例化在“正常”情况下(参见Marc的答案以获取边缘情况)永远不会导致null,假设内存成功分配。不,检查这个没有意义。
跳过空值检查 - 唯一不创建对象的情况是构造函数中出现异常。
new()
永远不会返回null
”。几乎总会有一些晦涩和深奥的情况允许规则被任意颠覆(例如,也许有人制作了一个自定义的.NET运行时,为了好玩而随机返回null
)。但那不是明智的选择,在任何合理的情况下都能保持正确的答案对我来说已经足够好了。 - aroth