C# conditional using block statement

后端 未结 10 1842
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-02 07:25

I have the follow code but it is awkward. How could I better structure it? Do I have to make my consuming class implement IDisposable and conditionally construct the network acc

10条回答
  •  不要未来只要你来
    2021-02-02 08:00

    One option, which is somewhat nasty but would work, based on the fact that the C# compiler calls Dispose only if the resource is non-null:

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

    Another alternative would be to write a static method which returned either null or a NetworkAccess:

    private Core.NetworkAccess CreateNetworkAccessIfNecessary()
    {
        return useNetworkAccess
            ? new Core.NetworkAccess(username, password, domain)) : null;
    }
    

    Then:

    protected void ValidateExportDirectoryExists()
    {
        using (CreateNetworkAccessIfNecessary())
        {
            CheckExportDirectoryExists();
        }
    }
    

    Again, I'm still not sure I don't prefer the original... it really depends on how often you need this pattern.

提交回复
热议问题