2013-01-13 17 views
5

Gibt es irgendwelche triftigen Gründe, warum es keine Überlastung der String.Split gibt, die eine Trennzeichenfolge und einen zu trennenden Text akzeptiert?Warum gibt es keine Zeichenfolge.Split (String) Überladung?

string[] Split(string delimiter) 

, die dann wie

verwendet werden könnten
string input = "This - is - an - example"; 
string[] splitted = input.Split(" - "); 
// results in: 
// { "This", "is", "an", "example" } 

Ich weiß wirklich, dass ich einfach eine Erweiterung Methode erstellen kann, aber es muss gültig Grund sein, warum diese nicht hinzugefügt wurde.

Bitte beachten Sie, dass ich nicht nach einer Lösung suche, wie man eine Zeichenkette mit einem Trennzeichen trennt, sondern eher nach einer Erklärung, warum eine solche Überlastung Probleme verursachen könnte. Dies ist, weil ich glaube nicht, dass es wirklich Probleme verursachen würde und ich finde es wirklich schwierig für Anfänger, zu verstehen, warum wir eine tatsächliche string[] anstelle einer einfachen string als Trennzeichen übergeben müssen.

+3

Ich könnte mir vorstellen, Es gibt eine Reihe von scheinbar einfachen Methoden, die hinzugefügt werden könnten, aber aus diesem Grund können Sie Ihre eigenen über Erweiterungsmethoden hinzufügen, wie Sie darauf hinweisen. – glosrob

+0

Wie Sie an den Antworten erkennen können, ist es unwahrscheinlich, dass Sie eine Antwort auf diese Frage erhalten. Meine Vermutung ist, dass es etwas mit einer Usability-Studie zu tun hat, bei der die Testpersonen irgendwie in Schwierigkeiten gerieten, möglicherweise weil sie sich nicht richtig mit Char-vs-String-Überladung auseinandergesetzt haben. Nur die .NET-Framework-Designer konnten sie genau beantworten, sie posten hier nicht. –

+1

@HansPassant Ich habe [Eric Lippert] (http://stackoverflow.com/users/88656/eric-lippert) über dieses Thema kontaktiert, hoffentlich kann er mehr Einblicke geben. – GameScripting

Antwort

3

die Frage Tweaking „Warum werden die obligatorischen StringSplitOptions Parameter beim Aufruf String.Split() mit ein String [] Argument? " könnte eine Antwort auf Ihre Frage geben.

Beachten Sie, dass es tatsächlich keine String.Split() - Überladung gibt, die ein einzelnes Zeichen akzeptiert. Die Überladung benötigt ein Char [], aber da es sich um ein Parameter-Array handelt, können Sie es mit einem einzelnen Zeichen aufrufen und es wird implizit in ein Char [] umgewandelt. z.B.

"1,2,3,4,5".Split(','); 

ruft die gleiche Split() Überlastung als

"1,2,3,4,5".Split(new[] { ',' }); 

Wenn eine Überlastung von Split() waren, die ein einzelnes Argument String [akzeptiert] dann würden Sie in der Lage Split zu rufen, indem ein einzelnes String-Argument.

Diese Überladung existiert jedoch nicht und StringSplitOptions ist obligatorisch, wenn String [] an Split übergeben wird. Warum StringSplitOptions obligatorisch ist, kann ich nur theoretisieren, aber es kann sein, dass beim Teilen mit einer Zeichenfolge die Wahrscheinlichkeit einer komplexen Aufteilung für den Algorithmus erheblich zunimmt. Um erwartete Ergebnisse für diese Fälle bereitzustellen, ist es vorzuziehen, das Verhalten der Methode zu definieren, wenn mehrere Begrenzer nebeneinander zu finden sind. d. h. StringSplitOptions ist obligatorisch.

Man könnte argumentieren, dass Sie eine Split(String, StringSplitOptions) Überlastung haben könnte, aber wie Ilya Ivanov oben in der Antwort erwähnt, müssen Sie irgendwo stoppen und es ist eine ganz gute Art und Weise in einen einzelnen String übergeben.

+0

Erste Antwort, die sich mit meiner Frage beschäftigt, und eine gute auch. Vielen Dank. – GameScripting

+2

Die ['StringSplitOptions'] (http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx) ist wirklich nicht so fortgeschritten, ihre einzigen Mitglieder sind' None' und 'RemoveEmptyEntries'. – CodeCaster

-2
string input = "This - is - an - example"; 
string[] splitted = Regex.Split(input," - "); 
foreach (string word in splitted) 
{ 
    MessageBox.Show(word); 
} 

es die Frage der Räume nicht nur ist, es exatcly entspricht Ihrer string seperator, schauen

string input = "This,- is,- a,- complicated,- example"; 
string[] splitted = Regex.Split(input,",- "); 
foreach (string word in splitted) 
{ 
    MessageBox.Show(word); 
} 
+1

'Regex' ist langsamer als' String.split' und [man sollte 'Regex' nicht verwenden, wenn es nicht um reguläre Ausdrücke geht] (http://stackoverflow.com/a/2234376/808723). – GameScripting

+1

@GameScripting der von Ihnen angegebene Link erklärt nicht, warum Regex nicht verwendet werden sollte, wenn es sich nicht um reguläre Ausdrücke handelt. – Default

+0

@Default Sehen Sie sich die Kommentare an. Sie sagen genau dasselbe aus. Ich denke, 'Regex' zum Spalten von Strings könnte [verwirren weitere Entwickler] (http://stackoverflow.com/a/1257322/808723), da es über reguläre Ausdrücke zu bemerken. – GameScripting

Verwandte Themen