簡體   English   中英

Environment.CurrentDirectory 和 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的實現委托給DirectoryGetSet方法。

有一個有趣的風格API設計問題引發了 - 為什么Environment的設計者覺得常規屬性是合適的,而Directory的設計者更喜歡顯式的GetSet方法?

“框架設計指南”一書中有很多關於選擇屬性與方法的說法,其中一些可以在線獲得 在我看來,最相關的部分是(我的重點):

根據經驗,方法應該表示動作,屬性應該代表數據。 如果其他條件相同,則屬性優先於方法

...

  • 如果成員表示該類型的邏輯屬性,則使用屬性的CONSIDER

...

  • 在以下情況下,請使用方法而不是屬性:
    • 該操作比字段訪問慢幾個數量級

我認為所有事情都是明確的GetSet 方法更好地代表了這里發生的事情。

不,沒有其他差異。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM