我在Google Code上看到了由Stack Overflow团队设计的mvc-mini-profiler,其中在入门页面上有一件特别奇怪的事情:
var profiler = MiniProfiler.Current; // it's ok if this is null
using (profiler.Step("Set page title"))
{
ViewBag.Title = "Home Page";
}
如果profiler为空,怎么可能是“ok”的呢?在我的编程经验中,无论在什么情况下都从未知道在空引用上调用方法会被认为是“ok”,这样做似乎会抛出NullReferenceException
异常。这是否是使用using子句的特殊情况呢?我可以理解这个情况是可以接受的(我不知道它确实可以,但显然确实可以):
using (null)
{
...
}
但在空引用上调用方法似乎应该抛出异常,无论它是否在using语句中。有人能解释一下这种构造背后的翻译方式吗?这样我就可以理解为什么这样做是可以的了。
Step
是扩展方法还是实例方法? - user541686