2017-07-14 86 views
24

我可能錯過了一些非常基本的東西,但這讓我很難過。C#string.split variances

使用String.Split()我得到

.Split(' ') 

.Split(new char[' ']) 

鑑於這種代碼之間不同的結果:

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]}"); 
    } 

} 

爲什麼我得到不同的結果:

.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

大小我想你的意思做'新的char [] {」「}'的第二個 – Jamiec

回答

40
new char[' '] 

不會做你認爲它做的事情。

空格爲ASCII character 32(並且C#允許在charint之間的隱式轉換)。這樣的代碼創建的char陣列與32

+7

也許值得指出的原因 - 有一個'char'和'int'之間的隱式轉換 – Jamiec

+7

這個錯誤很難發現,不是嗎?他們應該已經創造了一個不能隱式轉換爲int的角色。 :) – Sweeper

+3

我會假定像C#這樣的強類型語言根本不應該支持隱式轉換。我同意你的看法@Sweeper – John