2010-01-08 9 views

Antwort

34

So möchten Sie eine Reihe von string, ein char jeder:

string s = "abcdef"; 
string[] a = s.Select(c => c.ToString()).ToArray(); 

Das funktioniert, weil stringIEnumerable<char> implementiert. So Select(c => c.ToString()) projekte char in der string zu einer string, die char und ToArray enumeriert die Projektion und konvertiert das Ergebnis in ein Array von string.

Wenn Sie eine ältere Version von C# verwenden:

string s = "abcdef"; 
string[] a = new string[s.Length]; 
for(int i = 0; i < s.Length; i++) { 
    a[i] = s[i].ToString(); 
} 
+0

Eigentlich, obwohl beide Ihrer Beispiele Ihnen am Ende das gleiche String-Array geben, ist der zweite ("ältere") Weg wesentlich schneller. LINQ muss eine Menge Overhead-Übersetzung durchführen, bevor der Code auf den Code des zweiten Satzes reduziert wird. Versuchen Sie einen Zeittest; Der LINQ dauert mehr als doppelt so lange wie das Beispiel "longhand". –

+0

Ich vermute, dass etwas mit Ihrer Timing-Methode nicht stimmt. – jason

8

Ja.

"abcdef".ToCharArray(); 
+4

Er sagte 'string' Array, nicht' char' Array. Beachten Sie, dass, wenn Sie "String.Split" auf dem leeren 'char' zwischen jedem' char' in der 'string' hätten, das Ergebnis ein' string [] 'wäre. Dies scheint das Verhalten zu sein, nach dem er sucht. – jason

+2

Mein schlechtes. Ich nahm mir Freiheiten, um die falsche Grammatik seiner Frage zu interpretieren, aber meine Interpretation war eindeutig falsch. Danke, dass du es aufgezeigt hast. –

3

Sie Linq verwenden könnte und zu tun:

string value = "abcdef"; 
string[] letters = value.Select(c => c.ToString()).ToArray(); 

Dies würde Sie ein Array von Strings anstelle eines Arrays von Zeichen erhalten .

0

Etwas mehr Masse als die oben genannten, aber ich sehe keinen einfachen Liner dafür.

List<string> results = new List<string>; 

foreach(Char c in "abcdef".ToCharArray()) 
{ 
    results.add(c.ToString()); 
} 


results.ToArray(); <-- done 

Was ist los mit string.split ???

3

Warum gehst du nicht einfach

string value="abcd"; 

value.ToCharArray(); 

textbox1.Text=Convert.toString(value[0]); 

den ersten Buchstaben der Zeichenfolge zu zeigen; das wäre in diesem Fall "a".

Verwandte Themen