我有以下代码,但是很尴尬。我如何更好地组织它?我是否必须让我的消费类实现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();
}
}
同样,我仍然不确定我是否不喜欢原始样式……这实际上取决于您需要这种模式的频率。