我在Path.Combine
一看,發現它有四個重載:幾個重載的方法與 「PARAMS」 關鍵字
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三種重載如何有用?
我看到它的方式,第四次重載使其他人毫無意義。我查看了源代碼,並且我確實看到第四個重載的實現有點不同,但即使在這種情況下,我也希望只有一個重載,它根據數組的長度決定使用哪個實現。
我在Path.Combine
一看,發現它有四個重載:幾個重載的方法與 「PARAMS」 關鍵字
string
,string
string
,string
,string
string
,string
,string
,string
params string[]
前三種重載如何有用?
我看到它的方式,第四次重載使其他人毫無意義。我查看了源代碼,並且我確實看到第四個重載的實現有點不同,但即使在這種情況下,我也希望只有一個重載,它根據數組的長度決定使用哪個實現。
根據這個回答,https://stackoverflow.com/a/2796763/385844,這是爲了避免創建參數數組的開銷,並且因爲非參數重載對於不支持可變長度參數列表的語言的用戶很方便。
也
就像奧德說,我發現,它必須已經存在了向後兼容性,因爲我無法發現它在2.0,3.5
我認爲超載開始於4.0
至於其他許多重載,我不會爲.NET團隊說話,但我覺得他們覺得是沒有意義的每增加重載時間,讓他們停在4和提供的字符串的超過4個組合陣列 - 我認爲這是明智的
我根據我的Lambda表達式解釋所在球隊停在16個參數
Action(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16)
Path.Combine本來可以像那樣,但毫無意義。
我只能說見我與其他C#開發經驗。
不是所有的開發人員都熟悉或習慣params
語法(並且事實上技術名稱是可變參數函數沒有幫助)。
我知道我不得不一遍又一遍地解釋它,所以它是很平常看到當作使用電話
instance.ParamsMethod(new int[]{1});
//or even
instance.ParamsMethod(new List<int>{1}.ToArray());
的方法:
公共無效ParamsMethod(PARAMS INT []源){}
否定所有甜句法糖params
(然後一些)。
所以,我的個人偏好是提供1和2參數的情況下重載,因爲這樣會使得難以不必要地混淆代碼。由於過載鏈接,該呼叫稍微慢一點,但它有助於製作更清晰的代碼。
那麼'Combine(String,String)'有向後兼容性(4之前的版本沒有任何其他重載)。 – Oded
據我所知,非參數重載允許您跳過創建參數數組和參數迭代器的開銷。但我不記得我在哪裏閱讀,所以我在評論而不是回答。 – phoog
@phoog - 這是有道理的。大多數用途需要結合多達4個路徑部分。 – Oded