2017-07-14 10 views
24

Pewnie przegapiłem coś bardzo prostego, ale to mnie zaskoczyło.C# string.split variances

Podczas korzystania String.split() uzyskać różne wyniki między

.Split(' ') 

i

.Split(new char[' ']) 

Biorąc pod uwagę ten kod:

using (System.IO.StreamWriter sw = new StreamWriter(@"C:\consoleapp1.log", true)) 
{ 
    string anystring = "pagelength=60 pagewidth=170 cpi=16 lpi=8 landscape=1 lm=2"; 
    sw.WriteLine(".Split(' ')"); 
    string[] anystrings1 = anystring.Split(' '); 
    for (int i = 0; i < anystrings1.Length; i++) 
    { 
     sw.WriteLine([email protected]"{i,2}: {anystrings1[i]}"); 
    } 
    sw.WriteLine(".Split(new char[' '])"); 
    string[] anystrings2 = anystring.Split(new char[' ']); 
    for (int i = 0; i < anystrings2.Length; i++) 
    { 
     sw.WriteLine([email protected]"{i,2}: {anystrings2[i]}"); 
    } 

} 

Dlaczego uzyskać różne wyniki:

.Split(' ') 
0: pagelength=60 
1: pagewidth=170 
2: cpi=16 
3: lpi=8 
4: landscape=1 
5: lm=2 
.Split(new char[' ']) 
0: pagelength=60 pagewidth=170 cpi=16 lpi=8 landscape=1 lm=2 
+14

myślę, że oznaczało to zrobić 'new char [] {” „}' na drugi – Jamiec

Odpowiedz

40
new char[' '] 

nie robi tego, co myślisz.

Przestrzeń to ASCII character 32 (a C# umożliwia niejawne konwersje między char i int). Tak, że kod tworzy tablicę z char z rozmiarem 32.

+7

Może warto wskazując przyczynę - nie jest niejawna konwersja pomiędzy 'char' i' int' – Jamiec

+7

Ten błąd jest tak trudny do zauważenia, prawda? Powinny mieć postać nie pośrednio wymienialną na int. :) – Sweeper

+3

Założę się, że mocno napisany język, taki jak C#, nie powinien w ogóle obsługiwać niejawnych konwersji. Zgadzam się z tobą na tym @Sweeper – John

Powiązane problemy