Environment.CurrentDirectory和Directory.GetCurrentDirectory有什么区别?
在.NET中有什么区别:
Environment.CurrentDirectory
-
Directory.GetCurrentDirectory()
?
当然, Environment.CurrentDirectory
是一个可以设置和获取的属性。
还有其他差异吗?
正如大卫所说:他们做同样的事情。 在内部,当获取Environment.CurrentDirectory
,它将调用Directory.GetCurrentDirectory
并且在设置Environment.CurrentDirectory
,它将调用Directory.SetCurrentDirectory
。
只需选择一个喜欢并随身携带。
根据其他答案,没有区别 – Environment.CurrentDirectory
的实现委托给Directory
的Get
和Set
方法。
有一个有趣的风格API设计问题引发了 – 为什么Environment
的设计者觉得常规属性是合适的,而Directory
的设计者更喜欢显式的Get
和Set
方法?
框架设计指南书中有很多关于选择属性与方法的说法,其中一些可在线获得 。 在我看来,最相关的部分是(我的重点):
根据经验,方法应该表示动作,属性应该代表数据。 如果其他条件相同,则属性优先于方法
…
- 如果成员表示该类型的逻辑属性,则使用属性的CONSIDER
…
- 在以下情况下,请使用方法而不是属性:
- 该操作比字段访问慢几个数量级
我认为所有事情都是明确的Get
和Set
方法更好地代表了这里发生的事情。
不,没有其他差异。
Directory.SetCurrentDirectory抛出不少于7个exception,因此检查可能出错的所有内容可能非常耗时。 因此,该方法可能符合
“在以下情况下,请使用方法,而不是财产:
The operation is orders of magnitude slower than a field access would be"
甚至GetCurrentDirectory也有2个可能的例外。 在最糟糕的情况下,在网络和/或大量子目录中进行导航这些可能需要几秒而不是几毫秒。