我看到其他开发人员编写的代码看起来像这样:
var stringBuilder = new StringBuilder();
if(stringBuilder == null)
{
// Log memory allocation error
// ...
return;
}
(代码中的所有地方)
问题1:
这个错误记录代码甚至会被调用吗?如果没有记忆,那么第一行上不会抛出System.OutOfMemoryException
吗?
问题2: 对构造函数的调用是否可以返回null?
答案 0 :(得分:16)
你是对的,而且代码错了。它将使OutOfMemoryException
失败。这在the documentation中很明显:
“如果新运营商未能分配 内存,它抛出异常 OutOfMemoryException异常“。
构造函数不返回任何内容,更不用说null了。他们操纵已经分配的对象。
答案 1 :(得分:2)
我的假设是编码器曾经在C ++中工作,并且不知道C#中的工作原理。
答案 2 :(得分:2)
现在,这段代码是另一回事:
StringBuilder stringBuilder = null;
try { stringBuilder = new StringBuilder(); } catch(Exception) {}
if(stringBuilder == null)
{
// Log memory allocation error
// ...
return;
}
在这种情况下,字符串构建器可以(可以想象)为空。
答案 3 :(得分:1)
答案 4 :(得分:0)
这是代码的更好版本。如果没有足够的内存来分配引用,你会遇到更大的问题。
StringBuilder stringBuilder = null;
try {
stringBuilder = new StringBuilder();
}
catch(OutOfMemoryException) {
// log memory error
}