C# Environment.CurrentDirectory和Directory.GetCurrentDirectory之间有什么区别?

C# Environment.CurrentDirectory和Directory.GetCurrentDirectory之间有什么区别?,c#,.net,C#,.net,在.NET中,以下各项之间的区别是什么: Environment.CurrentDirectory 目录。GetCurrentDirectory() 当然,Environment.CurrentDirectory是一个可以设置和获取的属性 还有其他区别吗?没有,没有其他区别。正如大卫所说:他们做同样的事情。在内部,当获取环境.CurrentDirectory时,它将调用目录.GetCurrentDirectory,当设置环境.CurrentDirectory时,它将调用目录.SetCurre

在.NET中,以下各项之间的区别是什么:

  • Environment.CurrentDirectory
  • 目录。GetCurrentDirectory()
当然,
Environment.CurrentDirectory
是一个可以设置和获取的属性


还有其他区别吗?

没有,没有其他区别。

正如大卫所说:他们做同样的事情。在内部,当获取
环境.CurrentDirectory
时,它将调用
目录.GetCurrentDirectory
,当设置
环境.CurrentDirectory
时,它将调用
目录.SetCurrentDirectory


只需选择一个最喜欢的并随它去。

根据其他答案,没有区别-实现
环境。CurrentDirectory
委托
目录中的
获取
设置
方法

这引发了一个有趣的风格API设计问题-为什么
环境
的设计者认为常规属性是合适的,而
目录
的设计者更喜欢显式的
获取
设置
方法

《框架设计指南》一书中对选择属性和方法有相当多的论述,其中一些是。在我看来,最相关的部分是(我强调):

经验法则是方法应该 表示动作和属性 应该表示数据。属性是 如果一切正常,则首选方法 其他条件相同

  • 如果成员表示逻辑属性,请考虑使用属性 同类

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

我的观点是,显式的
Get
Set
方法更好地代表了这里发生的事情。

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

“在下列情况下,请使用方法而不是属性:

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

即使是GetCurrentDirectory也有2个潜在的例外。在最坏的情况下,通过网络和/或有大量子目录导航这些可能需要几秒钟而不是几毫秒。

+1我不经常在我发布的问答中投票,但参考框架设计指南值得一试。我还我同意你的结论。我认为这更多的是一个逻辑上的差异造成的。它是环境上下文中的一个自然属性,但在目录中,它更像是一个“目录相关”属性“效用函数。与班上其他同学的一致性可能也是一个因素。在v1.1中,几乎所有的环境成员都是返回简单的、通常是固定的字符串的属性。相比之下,几乎所有目录成员都是访问文件系统的昂贵操作。