Params IEnumerable & lt; T & gt; c #
Warum kann ich verwenden, die eine IEnumerable-mit params? Wird das jemals behoben werden? Ich wünschte wirklich, Sie würden schreiben, die alten Bibliotheken zu verwenden Generika...
InformationsquelleAutor der Frage Dested | 2010-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Frage setzt Voraus, dass das design-team muss einen Grund nicht ein feature hinzufügen, um die Sprache. Diese Voraussetzung ist falsch.
Eher, um für ein feature verwendet werden, indem Sie es muss gedacht werden, entwickelt, spezifiziert, umgesetzt, getestet, dokumentiert und ausgeliefert. Diese haben alle große Kosten.
Den "params " enumerable" - Funktion wurde gedacht und konzipiert. Es hat nie spezifiziert, umgesetzt, getestet, dokumentiert oder ausgeliefert werden.
Daher können Sie nicht verwenden Sie die-Funktion.
UPDATE: Da dieses schreiben-Anfang 2015-hat jetzt angegeben, aber die Umsetzung, Test, Dokumentation und Versand geschnitten wurden, für C# 6.0 in der zweiten Hälfte des 2014. Finden Sie unter Lucian ' s Ankündigung hier: http://roslyn.codeplex.com/discussions/568820.
Da hat es noch nicht umgesetzt, getestet, dokumentiert und ausgeliefert werden, gibt es noch keine solche Funktion. Hoffentlich machen Sie es in eine hypothetische zukünftige version von C#.
UPDATE: ich sollte klarstellen, was ich meine mit "das feature" da es möglich ist, wir alle haben verschiedene Ideen in unseren Köpfen was "das feature" ist. Die Funktion, die ich spreche, ist es, dass Sie so etwas sagen, wie
und dann die Website aufrufen können entweder in der "normalen form" übergeben, eine Folge von ganzen zahlen, oder die "erweiterte form" Zerlegen(10, 20, 30). Wenn in der erweiterten form, erzeugt der compiler den Aufruf, als ob Sie gesagt hatte, Zerlegen(new int[] { 10, 20, 30}), das gleiche wie für die Parameter-arrays. Der Punkt, der die Besonderheit ist, dass es oft der Fall, dass die Methode nie verwendet, wahlfreier Zugriff auf das array, und deshalb konnten wir Schwächen die Anforderung, dass die params ein array sein. Die params konnte nur eine Sequenz statt.
Können Sie dies tun heute, indem Sie einer überlastung:
ist ein bisschen wie ein Schmerz. Wir konnten einfach erlauben, Sie zu verwenden, IEnumerable als den Typ der Parameter argument und mit ihm getan werden.
Ich hoffe so. Diese Funktion wurde auf der Liste für eine lange Zeit. Es würde eine Menge von Funktionen der Arbeit viel mehr schön mit LINQ.
ohne zu schreiben, zwei verschiedene Versionen von Zerlegen.
Es ist jedoch eine bloße "kleine convenience" - Funktion; es hat nicht wirklich eine ganze Menge neue Kraft der Sprache. Deshalb ist es nicht hoch genug auf der Prioritätenliste zu machen, um die "Spezifikation wird geschrieben" die Bühne.
Kommentar vermerkt.
InformationsquelleAutor der Antwort Eric Lippert
Ah, ich glaube, ich kann haben jetzt verstanden, was du meinst. Ich denke, Sie wollen in der Lage sein, zu erklären, eine Methode wie diese:
Und dann in der Lage sein, es zu nennen mit einer "normalen" argument wie dieses:
oder mit mehreren Parametern:
Ist, dass das, was Sie sind, nach? (Wobei anzumerken ist, das Sie wollen, die erste form zu verwenden
T=string
eher alsT=IEnumerable<string>
mit einem einzigen element,...)Wenn dem so ist, Stimme ich es könnte nützlich sein - aber es ist leicht genug zu haben:
Ich nicht finden, ich mache dies oft genug, um die oben ein besonders hässlicher workaround.
Beachten Sie, dass beim Aufruf der oben genannten code, werden Sie wollen, um explizit geben Sie die Art argument, um dem compiler das vorziehen einer der
params
Beispiel. So zum Beispiel:InformationsquelleAutor der Antwort Jon Skeet
Die params-Parameter gesendet werden, wie ein array und eine
IEnumerable<T>
bieten nicht die random-Zugriff, der erforderlich ist, um zu handeln als ein array.Erstellen Sie das array von der IEnumerable-wenn Sie die Methode aufrufen:
InformationsquelleAutor der Antwort Guffa