Environment.CurrentDirectory和Directory.GetCurrentDirectory有什么区别?

在.NET中有什么区别:

  • Environment.CurrentDirectory
  • Directory.GetCurrentDirectory()

当然, Environment.CurrentDirectory是一个可以设置和获取的属性。

还有其他差异吗?

正如大卫所说:他们做同样的事情。 在内部,当获取Environment.CurrentDirectory ,它将调用Directory.GetCurrentDirectory并且在设置Environment.CurrentDirectory ,它将调用Directory.SetCurrentDirectory

只需选择一个喜欢并随身携带。

根据其他答案,没有区别 – Environment.CurrentDirectory的实现委托给DirectoryGetSet方法。

有一个有趣的风格API设计问题引发了 – 为什么Environment的设计者觉得常规属性是合适的,而Directory的设计者更喜欢显式的GetSet方法?

框架设计指南书中有很多关于选择属性与方法的说法,其中一些可在线获得 。 在我看来,最相关的部分是(我的重点):

根据经验,方法应该表示动作,属性应该代表数据。 如果其他条件相同,则属性优先于方法

  • 如果成员表示该类型的逻辑属性,则使用属性的CONSIDER

  • 在以下情况下,请使用方法而不是属性:
    • 该操作比字段访问慢几个数量级

我认为所有事情都是明确的GetSet 方法更好地代表了这里发生的事情。

不,没有其他差异。

Directory.SetCurrentDirectory抛出不少于7个exception,因此检查可能出错的所有内容可能非常耗时。 因此,该方法可能符合

“在以下情况下,请使用方法,而不是财产:

 The operation is orders of magnitude slower than a field access would be" 

甚至GetCurrentDirectory也有2个可能的例外。 在最糟糕的情况下,在网络和/或大量子目录中进行导航这些可能需要几秒而不是几毫秒。