Co kiedyś mieć:Korzystanie z ParamArray, ale wymagające co najmniej jeden parametr
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
Pierwszy z nich po prostu wywołuje drugi z {channel}
do przekształcenia jej parametr do tablicy.
Zdecydowałem, że utworzenie listy kanałów do przekazania do tej metody było niezręczne i zdecydowałem się połączyć dwa przeciążenia w jedną metodę, która zajmuje ParamArray
.
Public Sub Subscribe(ParamArray channels() As ChannelType)
'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid
Co to jest "najlepsza praktyka" tutaj? Podoba mi się elastyczność, jaką daje mi ParamArray
, pozwalając ludziom przekazywać rzeczy, ale nie pomaga to deweloperowi "działać bezawaryjnie" dzięki informowaniu o błędzie kompilatora ... oznacza to, że coś takiego jak ArgumentException
jest tutaj wykluczone, ponieważ ludzie Spożywanie tej metody nie może oznaczać testów jednostkowych. Jeden opcji jest następujące ...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
ale czuję, że stawia mnie prawie z powrotem do punktu wyjścia, jest kłopotliwe i wymaga mój wdrożenie tej metody jest mniej prosta.
To jest sprytne! –
Myślę, że ta odpowiedź to ... przepraszam @ Meta-Knight! Podoba mi się, jak uzyskuję informację zwrotną od kompilatora i uzyskuję prostą łatwość użycia, mogąc po prostu powtórzyć "ParamArray" zamiast konieczności łączenia jednego elementu z "ParamArray", aby powtórzyć moje argumenty. –
@JeffBridgman: Zauważ, że ten kod, w przeciwieństwie do podejścia z oddzielnym argumentem, umożliwia przekazywanie kodu w tablicy zawierającej wszystkie parametry, zamiast przechodzić pierwszy element i tablicę zawierającą resztę; w konsekwencji, podczas gdy może odrzucić wywołanie z pustą listą argumentów, nie może w czasie kompilacji odrzucić wywołania z pustą tablicą. – supercat