Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
第一個只是調用第二個與{channel}
其參數轉換爲數組。
我決定創建一個傳遞給該方法的通道列表很尷尬,並選擇將兩個過載組合成一個方法,該方法需要一個ParamArray
。
Public Sub Subscribe(ParamArray channels() As ChannelType)
'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid
這裏的「最佳實踐」是什麼?我喜歡ParamArray
只是讓人們傳遞東西的靈活性,但它無法通過編譯器錯誤反饋幫助開發人員「更快地失敗」......這意味着像ArgumentException
這樣的東西在這裏不存在問題,因爲人們使用此方法可能不會編寫任何單元測試。其中一個選項是以下...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
但我覺得這樣使我幾乎回到原點,是混亂的,並要求我執行該方法的不那麼簡單。
這很聰明! –
我認爲這個答案得到它......對不起@元騎士!我喜歡我如何獲得編譯器反饋,並且能夠簡單地遍歷ParamArray而不必使用ParamArray對單個項進行連接來迭代我的參數,從而獲得了直接的易用性。 –
@JeffBridgman:請注意,與具有單獨參數的方法不同,此代碼使代碼可以傳入包含所有參數的數組,而不必傳遞第一個項目和包含其餘數組的數組;因此,雖然它可以禁止使用空參數列表進行調用,但它在編譯時不能禁止使用空數組進行調用。 – supercat