C# 创建对象后检查空值

C# 创建对象后检查空值,c#,.net,C#,.net,我正在创建一个新对象 myobject t = new myobject(); 如果新操作成功,我是否应该在下一行检查空引用 if (null != t) 或者我可以确定这个对象肯定会不同于null 谢谢 new操作符用于为类的新实例分配内存。使用new进行实例化,在“正常”情况下(请参阅边缘情况),如果内存分配成功,则不会导致null 如果对象创建失败是因为其构造函数引发异常或无法分配内存,则该语句后面的代码将不会执行。因此,即使对象为null并且您尝试检查,检查也不会发生。您可以使用tr

我正在创建一个新对象

myobject t = new myobject();
如果新操作成功,我是否应该在下一行检查空引用

if (null != t)
或者我可以确定这个对象肯定会不同于null


谢谢

new操作符用于为类的新实例分配内存。使用
new
进行实例化,在“正常”情况下(请参阅边缘情况),如果内存分配成功,则不会导致null


如果对象创建失败是因为其构造函数引发异常或无法分配内存,则该语句后面的代码将不会执行。因此,即使对象为null并且您尝试检查,检查也不会发生。您可以使用try-catch块来处理异常。

不,检查这个没有意义

跳过空检查-不会创建对象的唯一情况是构造函数中的异常。

根据,如果
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();
与:

不过,谢天谢地,你确实需要走很长的路才能得到这种疯狂。在任何正常代码中,
new()
将永远不会返回
null
(可为null的
除外)。这两种反例将进行更多讨论


但是要重申:不,不要检查
null
的结果,除非你有理由怀疑某人真的非常愚蠢。

如果你必须检查它的属性,看看你是否可以对该对象采取行动,我认为这是一种代码气味。你有一个构造器,它可以生成处于不可用状态的对象;更多信息请参见我的答案。除了它不是真的;请参阅我的答案以了解计数器示例,但在您的计数器示例中,您承认“在任何正常代码中,
new()
永远不会返回
null
”。几乎总是有一些晦涩难懂的情况允许规则被任意破坏(例如,可能有人制作了一个自定义的.NET运行时,它有
new
随机返回
null
,只是为了好玩)。但这并不明智,一个在任何明智的情况下都适用的答案对我来说已经足够好了;但这是在常规的.NET框架中运行的,没有特殊的黑客、插件、库、配置等。请注意,在较新版本的CLR中,您无法真正处理OOMEException。您可以处理它,但它会自动重新抛出。这本质上是一个致命的例外。这里有一个反例。。。看我的answer@BoltClock-嗯,总得有人;P
class MyFunnyProxyAttribute : System.Runtime.Remoting.Proxies.ProxyAttribute {
   public override MarshalByRefObject CreateInstance(Type serverType) {
      return null;
   }
}
[MyFunnyProxy]
class MyFunnyType : ContextBoundObject { }