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 access class and dispose it when I am done?
protected void ValidateExportDirectoryExists() { if (useNetworkAccess) { using (new Core.NetworkAccess(username, password, domain)) { CheckExportDirectoryExists(); } } else { CheckExportDirectoryExists(); } }
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With