在我正在处理的代码库中有几个
的例子if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
根据MSDN文档(http://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx),这是多余的,因为createDirectory不会覆盖现有目录。
这可以看作是使代码更清晰,因为.CreateDirectory(dir)
方法并不明显这是行为。
另一方面,这是代码膨胀并保持它(甚至将其添加到库/实用程序类)有它的问题(例如,你必须阅读/维护更多行代码)。
这里最佳做法是什么?
答案 0 :(得分:2)
这可能看起来多余,但我可以看到有人决定采用这种方式的原因。
主要区别在于:
Directory.Exists()
仅返回bool
Directory.CreateDirectory()
返回DirectoryInfo
因此,即使目录存在,也会执行额外的工作来获取DirectoryInfo
实例,这可能根本不需要。
另一件事是,您必须知道Directory.CreateDirectory
如果存在则不会覆盖该目录!即使有人不知道他可以很容易地弄清楚这段代码发生了什么,还可以拨打Directory.Exists
电话。
我不认为这里有best practice
。
答案 1 :(得分:2)
就个人而言,我通常会删除冗余代码。
这可以看作是使代码更清晰,因为从.CreateDirectory(dir)方法来看,这是行为。
一般来说,我认为评论会更好,而不是冗余的代码路径。添加额外的代码以避免缺乏知识似乎是包含检查的一个弱理由。
话虽如此,在避免调用CreateDirectory
时可能会有很小的性能(非常小的),因为该方法将构造一个DirectoryInfo
实例。在实践中,这很可能是“噪音”(因为IO调用往往相对来说相对昂贵),所以除非它被证明是一个测量问题,否则我不会将其考虑在内。
答案 2 :(得分:0)
即使初步检查已通过,竞争条件也可能导致目录创建失败。 因此我认为这段代码不正确,我劝阻你不要使用它。