![](/img/trans.png)
[英]Environment.CurrentDirectory vs System.IO.Directory.GetCurrentDirectory
[英]What is the difference between Environment.CurrentDirectory and 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個異常,因此檢查可能出錯的所有內容可能非常耗時。 因此該方法可能符合
“在以下情況下,請使用方法,而不是財產:
The operation is orders of magnitude slower than a field access would be"
甚至GetCurrentDirectory也有2個可能的例外。 在最糟糕的情況下,在網絡和/或大量子目錄中進行導航這些可能需要幾秒而不是幾毫秒。
public static string GetCurrentDirectory ();
https://referencesource.microsoft.com/#mscorlib/system/io/directory.cs,4de7d0d0c291277b
public static string CurrentDirectory { get; set; }
public static string CurrentDirectory { get; set; }
https://referencesource.microsoft.com/#mscorlib/system/environment.cs,b64586ead0df012b
雖然Environment.CurrentDirectory
稱為Directory.GetCurrentDirectory
,但我還是更喜歡使用Environment.CurrentDirectory
,因為它是一個 static 屬性,可以響應更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.