简单的类实例化会在C#中失败吗?

时间:2010-07-19 18:39:06

标签: c# .net asp.net instantiation out-of-memory

我看到其他开发人员编写的代码看起来像这样:

var stringBuilder = new StringBuilder();

if(stringBuilder == null)
{
    // Log memory allocation error
    // ...
    return;
}

(代码中的所有地方)

问题1: 这个错误记录代码甚至会被调用吗?如果没有记忆,那么第一行上不会抛出System.OutOfMemoryException吗?

问题2: 对构造函数的调用是否可以返回null?

5 个答案:

答案 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)

  1. 否。如果没有足够的可用内存来分配对象,则抛出OutOfMemoryException。
  2. 没有

答案 4 :(得分:0)

这是代码的更好版本。如果没有足够的内存来分配引用,你会遇到更大的问题。

StringBuilder stringBuilder = null;

try {
   stringBuilder = new StringBuilder();
}
catch(OutOfMemoryException) {
   // log memory error
}