簡體   English   中英

使用“params”關鍵字的方法的幾個重載

[英]Several overloads for method with “params” keyword

我已經看過Path.Combine ,發現它有四個重載:

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

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

根據這個答案https://stackoverflow.com/a/2796763/385844 ,這是為了避免創建參數數組的開銷,並且因為非params重載對於不支持可變長度的語言的用戶來說很方便參數列表。

也可以看看

為什么string.Format有幾種風格?

就像Oded說的那樣,我發現它必須存在向后兼容性,因為我在2.0,3.5中找不到它

我認為重載開始於4.0

至於其他很多重載,我不會代表.net團隊,但我覺得他們覺得每次增加重載都沒有意義所以他們停在4並且提供了超過4個字符串組合的字符串數組 - 我認為是明智的

我的解釋基於Lambda表達式,團隊停在了16個參數上

動作(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());

對於一個寫為:

public void ParamsMethod(params int [] source){}

否定了params所有甜的語法糖(然后是一些)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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