Gam*_*ing 8 .net c# string split code-design
是否有任何有效的理由可以解释为什么没有String.Split接受分隔符字符串和要分割的文本的重载?
string[] Split(string delimiter)
Run Code Online (Sandbox Code Playgroud)
然后可以使用像
string input = "This - is - an - example";
string[] splitted = input.Split(" - ");
// results in:
// { "This", "is", "an", "example" }
Run Code Online (Sandbox Code Playgroud)
我真的知道,我可以轻松地创建一个扩展方法,但必须有正当理由说明为什么没有添加它.
请注意,我不是在寻找如何使用字符串分隔符拆分字符串的解决方案,我正在寻找解释,为什么这样的重载可能会导致问题.这是因为我认为它不会真正引起问题,我发现初学者很难理解为什么我们必须传递一个实际string[]而不是简单string的分隔符.
将问题调整为“为什么在使用 String[] 参数调用 String.Split() 时必须使用 StringSplitOptions 参数?” 可能会为您的问题提供答案。
请注意,实际上并没有接受单个字符的 String.Split() 重载。重载采用 Char[],但由于它是一个 params 数组,您可以使用单个字符调用它,并且它会隐式转换为 Char[]。例如
"1,2,3,4,5".Split(',');
Run Code Online (Sandbox Code Playgroud)
调用相同的 Split() 重载
"1,2,3,4,5".Split(new[] { ',' });
Run Code Online (Sandbox Code Playgroud)
如果 Split() 的重载接受 String[] 的单个参数,那么您将能够通过传递单个字符串参数来调用 Split。
然而,这种重载并不存在,并且在将 String[] 传递给 Split 时, StringSplitOptions 是必需的。至于为什么 StringSplitOptions 是强制性的,我只能推测,但可能是当用字符串分割时,算法处理复杂分割的可能性显着增加。为了为这些情况提供预期结果,最好定义方法在查找彼此相邻的多个分隔符时的行为。即 StringSplitOptions 是强制性的。
您可能会说您可能会Split(String, StringSplitOptions)过载,但正如 Ilya Ivanov 在上面的答案中提到的那样,您需要在某个地方停下来,并且有一种非常好的方法可以传递单个字符串。
| 归档时间: |
|
| 查看次数: |
1770 次 |
| 最近记录: |