CheckExportDirectoryExists

CheckExportDirectoryExists

我有以下代码,但是很尴尬。我如何更好地组织它?我是否必须让我的消费类实现IDisposable并有条件地构造网络访问类并在完成后处置它?

    protected void ValidateExportDirectoryExists()
    {
        if (useNetworkAccess)
        {
            using (new Core.NetworkAccess(username, password, domain))
            {
                CheckExportDirectoryExists();
            }
        }
        else
        {
            CheckExportDirectoryExists();
        }
    }

最佳答案

基于C#编译器调用Dispose only if the resource is non-null的事实,这有点讨厌,但是可以起作用的一个选项:

protected void ValidateExportDirectoryExists()
{
    using (useNetworkAccess
               ? new Core.NetworkAccess(username, password, domain)
               : null)
    {
        CheckExportDirectoryExists();
    }
}

另一种选择是编写返回null或NetworkAccess的静态方法:
private Core.NetworkAccess CreateNetworkAccessIfNecessary()
{
    return useNetworkAccess
        ? new Core.NetworkAccess(username, password, domain)) : null;
}

然后:
protected void ValidateExportDirectoryExists()
{
    using (CreateNetworkAccessIfNecessary())
    {
        CheckExportDirectoryExists();
    }
}

同样,我仍然不确定我是否不喜欢原始样式……这实际上取决于您需要这种模式的频率。

10-04 18:47