我曾经拥有的:
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)
但我觉得这让我几乎回到了原点,令人困惑,并且要求我对该方法的实施不那么直截了当。