我曾经拥有的:
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
让人们传递东西的灵活性,但它无法通过编译器错误反馈帮助开发人员“更快地失败”......这意味着像 an 这样的东西ArgumentException
在这里是不可能的,因为人们消费它方法可能不会编写任何单元测试。一种选择如下...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
但我觉得这让我几乎回到了原点,令人困惑,并且要求我对该方法的实施不那么直截了当。