-->

为什么没有一个string.Split(串)超载? [关闭](Why isn't the

2019-07-18 04:02发布

是否有任何站得住脚的理由有没有过载String.Split它接受一个分隔符字符串和文本被拆分?

string[] Split(string delimiter)

这然后可以使用像

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

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

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

Answer 1:

调整的问题是“为什么将一个String []参数调用StringSplitOptions参数强制时String.Split()?” 可能提供一个回答你的问题。

请注意,实际上不是,它接受一个字符一个String.Split()的过载。 该重载采用一个char [],但因为它是一个参数数组,你可以使用单个字符,调用它,它是隐式转换为一个char []。 例如

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

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

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

如果有斯普利特(),它接受一个String []一个参数的重载,那么你就能够调用通过传递一个字符串参数分裂。

但是,这种过载不存在,并通过一个String []到分割时StringSplitOptions是强制性的。 至于为什么StringSplitOptions是强制性的,我只能推论,但它可能是一个字符串分割时,对算法复杂分流的可能性显著处理增加。 为了提供这些情况下预期的结果,找到彼此相邻,定义多个分隔符时,它是优选的方法中,的行为。 即StringSplitOptions是强制性的。

你可能会认为,你可以有一个Split(String, StringSplitOptions)过载,但伊利亚·伊万诺夫在回答上面提到,你需要停下来的地方,并没有传递一个字符串的一个完美的方法。



Answer 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);
}


文章来源: Why isn't there a string.Split(string) overload? [closed]