Lo que solía tener:El uso de un MatrizParam, pero que requiere al menos un parámetro
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
El primero sólo llama a la segunda con {channel}
para convertir su parámetro en una matriz.
Decidí que tener que crear una lista de canales para pasar al método era incómodo y elegí combinar las dos sobrecargas en un método que toma un ParamArray
.
Public Sub Subscribe(ParamArray channels() As ChannelType)
'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid
¿Qué es la "mejor práctica" aquí? Me gusta la flexibilidad que ParamArray
me da para dejar pasar cosas, pero no ayuda al desarrollador a "fallar-más rápido" a través de los comentarios de errores del compilador ... eso significa que algo como un ArgumentException
está fuera de cuestión aquí ya que las personas consumir este método puede no estar escribiendo pruebas unitarias. Una opción es la siguiente ...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
pero me siento como que me pone cerca de volver al punto de partida, es confuso, y requiere mi aplicación de ese método a ser menos sencilla.
¡Eso es inteligente! –
Creo que esta respuesta lo consigue ... lo siento @ Meta-Knight! Me gusta cómo obtengo los comentarios del compilador y obtengo una facilidad de uso simple con la posibilidad de simplemente iterar sobre el 'ParamArray' en lugar de tener que concaturar un solo elemento con' ParamArray' para iterar sobre mis argumentos. –
@JeffBridgman: Tenga en cuenta que este código, a diferencia del enfoque con un argumento separado, permite que el código pase en una matriz que contiene todos los parámetros en lugar de tener que pasar el primer elemento y una matriz que contiene el resto; como consecuencia, aunque puede rechazar la invocación con una lista de argumentos vacía, no puede, en tiempo de compilación, rechazar la invocación con una matriz vacía. – supercat