2012-12-26 21 views
5

我在Path.Combine一看,發現它有四個重載:幾個重載的方法與 「PARAMS」 關鍵字

  1. stringstring
  2. stringstringstring
  3. stringstringstringstring
  4. params string[]

前三種重載如何有用?
我看到它的方式,第四次重載使其他人毫無意義。我查看了源代碼,並且我確實看到第四個重載的實現有點不同,但即使在這種情況下,我也希望只有一個重載,它根據數組的長度決定使用哪個實現。

+0

那麼'Combine(String,String)'有向後兼容性(4之前的版本沒有任何其他重載)。 – Oded

+0

據我所知,非參數重載允許您跳過創建參數數組和參數迭代器的開銷。但我不記得我在哪裏閱讀,所以我在評論而不是回答。 – phoog

+0

@phoog - 這是有道理的。大多數用途需要結合多達4個路徑部分。 – Oded

回答

1

就像奧德說,我發現,它必須已經存在了向後兼容性,因爲我無法發現它在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本來可以像那樣,但毫無意義。

+1

是的,但它不能解釋3和4個字符串重載(特別是因爲params數組超載是在同一時間添加的)。 – Oded

+0

@Oded查看我的更新。希望正軌? – codingbiz

+2

「行動」的事情是不同的,目前沒有辦法爲'params'通用定義。 – SWeko

0

我只能說見我與其他C#開發經驗。

不是所有的開發人員都熟悉或習慣params語法(並且事實上技術名稱是可變參數函數沒有幫助)。
我知道我不得不一遍又一遍地解釋它,所以它是很平常看到當作使用電話

instance.ParamsMethod(new int[]{1}); 
//or even 
instance.ParamsMethod(new List<int>{1}.ToArray()); 

的方法:

公共無效ParamsMethod(PARAMS INT []源){}

否定所有甜句法糖params(然後一些)。

所以,我的個人偏好是提供1和2參數的情況下重載,因爲這樣會使得難以不必要地混淆代碼。由於過載鏈接,該呼叫稍微慢一點,但它有助於製作更清晰的代碼。