using在(可能)null对象上使用该语句是否安全?
请考虑以下示例:
class Test {
    IDisposable GetObject(string name) {
        // returns null if not found
    }
    void DoSomething() {
        using (IDisposable x = GetObject("invalid name")) {
            if (x != null) {
                 // etc...
            }
        }
    }
}
是否保证Dispose只有在对象不为空时才会被调用,而且我不会得到一个NullReferenceException?
编辑:我的问题不是关于使用块及其工作原理.我的问题是关于两种方法的区别,如下所示.
我正在阅读CQRS旅程指南,我不明白这行代码:
using (repo as IDisposable)
那是什么意思?为什么将它用作IDisposable?在典型的使用块中,不需要将其用作IDisposable:
using (var repo = this.respositoryFactory()) { // ... }
知道为什么作者以第一种方式而不是第二种方式编写它?
这是代码出现的方法:
private Conference.Web.Public.Models.Conference GetConference(string conferenceCode)
{
    var repo = this.repositoryFactory();
    using (repo as IDisposable)
    {
        var conference = repo.Query<Conference>()
            .First(c => c.Code == conferenceCode);
        var conferenceModel =
        new Conference.Web.Public.Models.Conference
        {
            Code = conference.Code,
            Name = conference.Name,
            Description = conference.Description
        };
        return conferenceModel;
    }
}