2014-01-27 133 views
-4

爲什麼下面的代碼無法分割字符串以查找字數? valueAsString是一個有效值的字符串;以空格分隔字符串作爲分隔符

valuesAsString.Split(" "); 

下面的代碼工作正常

valuesAsString.Split(' '); 
+0

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

你是什麼意思「無效」?你的意思是有一個編譯錯誤?哪個錯誤? –

+0

因爲沒有這樣的過載。爲什麼沒有這種超載?猜測只有編寫框架的微軟編寫的程序員可以肯定地說,否則我們只能猜測。 –

回答

3

string.Split的重載方法:

public string[] Split(params char[] separator) 
public string[] Split(params char[] separator, int count)  
public string[] Split(params char[] separator, StringSplitOptions options) 
public string[] Split(params char[] separator, int count, StringSplitOptions options) 
public string[] Split(string[] separator, StringSplitOptions options) 
public string[] Split(string[] separator, int count, StringSplitOptions options) 

所以string.Split(char)可行,因爲params說明符允許編譯器將單個字符視爲具有一個值的數組,因此選擇了第一個重載。

由於

public string[] Split(params string[] separator) 

public string[] Split(string separator) 

不是過載,並且存在從stringchar[]的隱式轉換時,編譯器炮直接結合string.Split(string)

一些替代方案,將工作:

valuesAsString.Split(new [] {" "}, StringSplitOptions.None); 
valuesAsString.Split(" ".ToCharArray()); 

或只是

valuesAsString.Split(); 

,因爲編譯器將缺少值作爲一個空的「陣列」爲params參數,和每個文檔:

如果分隔符參數爲空或不包含字符,則爲空白字符rs被認爲是分隔符。空白字符由Unicode標準定義,如果傳遞給Char.IsWhiteSpace方法,則返回true。

+0

對於'ToCharArray()'+1,很好玩! –

1

拆分需要一個字符作爲分隔符。當你使用雙引號時,你將它標記爲一個字符串。如果你使用單引號,它是一個字符。

0

因爲String.Split需要一個字符而不是字符串。 「」代表一個字符,而「」代表字符串

1

因爲有一個參數的拆分方法期望一個char參數(或字符數組):看here

+2

不是,它有幾個重載,包括字符串數組。 –

1

您正在尋找this重載版本我認爲:

valuesAsString.Split(new [] { " " } ,StringSplitOptions.None);