2013-01-13 35 views
5

是否有任何合理的理由说明,为什么没有超过接受分隔符字符串和要分割的文本的String.Split为什么没有string.Split(string)超载?

string[] Split(string delimiter) 

可能再像使用

string input = "This - is - an - example"; 
string[] splitted = input.Split(" - "); 
// results in: 
// { "This", "is", "an", "example" } 

我真的知道,我可以轻松地创建一种推广方法,但必须有为什么这个尚未添加正当理由。

请注意,我没有找到如何使用字符串分隔符分割字符串的解决方案,我宁愿寻找解释,为什么这样的重载可能会导致问题。这是因为我不认为这真的会引起问题,我觉得初学者很难理解为什么我们必须通过一个实际的string[]而不是简单的string作为分隔符。

+3

我会想象有许多看似简单的方法可以添加,但这就是为什么你可以通过扩展方法添加你自己的方法,正如你指出的那样。 – glosrob

+0

正如你从答复中可以看出的那样,你不太可能得到这个问题的答案。我的猜测是它与可用性研究有关,测试对象以某种方式陷入困境,可能是因为没有正确处理Char和String超载。只有.NET框架设计师才能准确地回答它,他们不会在这里发布。 –

+1

@HansPassant我已经联系了[Eric Lippert](http://stackoverflow.com/users/88656/eric-lippert)关于这个问题,他可以提供更多见解。 – GameScripting

回答

3

调整的问题是“为什么叫String.Split当StringSplitOptions参数强制()与一个String []参数?“可能会为您的问题提供答案。

请注意,实际上并没有接受单个字符的String.Split()重载。重载需要一个Char [],但是因为它是一个params数组,你可以用一个字符来调用它,并且它隐式地转换为Char []。例如

"1,2,3,4,5".Split(','); 

调用相同的斯普利特()过载为

"1,2,3,4,5".Split(new[] { ',' }); 

如果有其中接受一个String []一个参数斯普利特()的过载,那么你就能够调用由经过拆分一个字符串参数。

但是,重载并不存在,并且在将String []传递给Split时必须使用StringSplitOptions。至于为什么StringSplitOptions是强制性的,我只能推理,但它可能是当用字符串分割时,算法处理的复杂分割的可能性显着增加。为了给这些情况提供预期的结果,当找到彼此相邻的多个分隔符时,该方法的行为最好被定义。即StringSplitOptions是强制性的。

你可能会认为你可以有一个Split(String, StringSplitOptions)过载,但伊利亚·伊万诺夫在回答上面提到,你需要停下来的地方,并有通过一个字符串中的一个非常好的途径。

+0

首先回答我的问题,也是一个好问题。谢谢。 – GameScripting

+2

['StringSplitOptions'](http://msdn.microsoft.com/en-us/library/system.stringsplitoptions.aspx)实际上并不那么先进,它的唯一成员是'None'和'RemoveEmptyEntries'。 – CodeCaster

-2
string input = "This - is - an - example"; 
string[] splitted = Regex.Split(input," - "); 
foreach (string word in splitted) 
{ 
    MessageBox.Show(word); 
} 

它不仅是空间的问题,它exatcly您string分隔符相匹配,看

string input = "This,- is,- a,- complicated,- example"; 
string[] splitted = Regex.Split(input,",- "); 
foreach (string word in splitted) 
{ 
    MessageBox.Show(word); 
} 
+1

'正则表达式'比'String.Split'慢['不应该使用正则表达式](http://stackoverflow.com/a/2234376/808723)。 – GameScripting

+1

@Game脚本您提供的链接不能解释为什么不应该使用正则表达式,如果它不是正则表达式。 – Default

+0

@默认看看评论。他们说的完全一样。我认为使用'Regex'来分割字符串可能会[让更多的开发者感到困惑](http://stackoverflow.com/a/1257322/808723),因为我们注意到了正则表达式。 – GameScripting

相关问题