Was ich habe folgende Zwecke verwendet:ein ParamArray Verwendung, sondern erfordert mindestens einen Parameter
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
Die erste nennt man nur die zweite mit {channel}
seine Parameter in ein Array zu konvertieren.
Ich entschied, dass das Erstellen einer Liste von Kanälen, die an die Methode übergeben werden, umständlich war und entschied, die beiden Überladungen in einer Methode zu kombinieren, die eine ParamArray
dauert.
Was ist die "beste Praxis" hier? Ich mag die Flexibilität, die ParamArray
gibt mir in nur Leute lassen Zeug übergeben, aber es hilft nicht, den Entwickler "fail-faster" über Compiler-Fehler-Feedback zu helfen ... das bedeutet, dass so etwas wie ein ArgumentException
ist nicht in Frage, da Menschen Bei dieser Methode dürfen keine Komponententests geschrieben werden. Eine Option ist die folgende ...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
Aber ich fühle mich wie das bringt mich fast wieder auf Platz eins, ist verwirrend und erfordert meine Implementierung dieser Methode weniger als geradlinig.
Das ist schlau! –
Ich denke, diese Antwort bekommt es ... sorry @ Meta-Knight! Ich mag, wie ich Compilerfeedback bekomme, und ich bekomme die einfache Benutzerfreundlichkeit mit der Fähigkeit, einfach über das "ParamArray" iterieren zu können, anstatt ein einzelnes Element mit dem 'ParamArray' zu contrahieren, um über meine Argumente zu iterieren. –
@ Jeff Bridgman: Beachten Sie, dass dieser Code im Gegensatz zu dem Ansatz mit einem separaten Argument Code in einem Array übergeben kann, das alle Parameter enthält, anstatt das erste Element und ein Array mit dem Rest übergeben zu müssen; Folglich kann der Aufruf mit einer leeren Argumentliste nicht zugelassen werden, während der Kompilierung kann er den Aufruf mit einem leeren Array nicht verbieten. – supercat