簡體   English   中英

方法簽名中的params關鍵字到底是什么意思

[英]What does params keyword in method signature really mean

我瀏覽了Troelsen的Pro C#2010,並遇到了有關params關鍵字方法修飾符的討論。 閱讀文本,MSDN和其他tubez資料后,在我看來,從params上獲得的唯一一件事就是能夠將以逗號分隔的值列表傳遞給該方法。 我寫了一些代碼向我證明,我可以將不同長度的數組發送給不使用params關鍵字的方法,並且一切正常。

現在,我都支持在合理時保存擊鍵。 但是,在這種情況下,我懷疑這種節省是虛幻的,並且使那些必須維護代碼的人感到困惑。 虛幻的原因是,我永遠不會將硬編碼的值列表發送給方法(錯誤的形式!)。 令人困惑的是,維護者要使用列出一堆值而不是解釋我在做什么的對象的方法來做什么?

OTOH,因為MS的大多數人和這里的大多數人比我聰明,我懷疑我缺少了一些東西。 請任何人啟發我!

謝謝。

您曾經使用過Console.WriteLine嗎?

Console.WriteLine("{0}: The value of {1} is {2}.", lineNumber, foo, bar);

這種調用是params可能有用的地方。 必須顯式構造一個數組來包含您的參數只是噪音,這使得代碼在不添加任何值的情況下很難閱讀。 與不使用params外觀相比:

Console.WriteLine("{0}: The value of {1} is {2}.", new object[] { lineNumber, foo, bar });

第二個版本沒有在代碼中添加任何有用的信息,並且將值從格式字符串移到更遠的位置,這使得查看情況變得更加困難。

因為我輸入起來比較容易:

SomeFuncWithParams(a, b, c);

比鍵入:

SomeFuncWithParams(new object[] { a, b, c });

而且,如果您認為語法糖不是實現功能的好理由,那么您還需要開始質疑屬性, using語句,對象初始化程序等的有效性。

  1. 是的,我一直認為.Net“ params”關鍵字在道德上等同於C / C ++可變參數。

  2. 不,我想不出“參數”和可變長度數組不完全等效的任何方式。

暫無
暫無

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

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