我正在创建一个新对象
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)
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
除非你有理由怀疑某人是真的,真的很愚蠢.