2014-01-27 134 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);