Usando un ParamArray, pero requiriendo al menos un parámetro
Lo que solía tener:
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
El primero solo llama al segundo con{channel}
para convertir su parámetro en un array.
Decidí que tener que crear una lista de canales para pasar al método era incómodo y opté por combinar las dos sobrecargas en un método que toma unaParamArray
.
Public Sub Subscribe(ParamArray channels() As ChannelType)
'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid
¿Cuál es la "mejor práctica" aquí? Me gusta la flexibilidad queParamArray
me permite simplemente dejar que la gente pase cosas, pero no ayuda al desarrollador a "fallar más rápido" a través de los comentarios de error del compilador ... eso significa que algo como unArgumentException
está fuera de discusión aquí, ya que las personas que consumen este método pueden no estar escribiendo ninguna prueba unitaria. Una de las opciones es la siguiente ...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
Pero siento que eso me pone de nuevo en una posición cuadrada, es confuso y requiere que mi implementación de ese método sea menos sencilla.