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