.NET中String.Split((string)null,...)不按空白拆分,它的作用是什么?
.NET Core 3.1中Split((string)null, ...)的行为解析
我曾在.NET Core 3.1环境下编写代码,想要按空白字符拆分字符串,最初写的代码如下:
string s = "A B"; var parts = s.Split(null, StringSplitOptions.RemoveEmptyEntries);
但编译器提示参数存在歧义,无法确定第一个参数是char[]类型还是string?类型。于是我将null强制转换为string类型,修改后的代码:
string s = "A B"; var parts = s.Split((string)null, StringSplitOptions.RemoveEmptyEntries);
结果却出乎意料——返回的数组仅包含一个元素"A B",完全没有按空白拆分。
查阅Split方法的所有重载文档后发现:接收单个字符串分隔符的重载,是唯一一种传入null分隔符不代表按空白拆分的重载。如果传入(string[])null、(char[])null、new char[0]或new string[0],就能得到按空白拆分的预期结果。当时编译器的错误提示没有列出所有歧义可能性,加上我满脑子想着字符串分隔符,忽略了提示里的char[]版本,才选错了重载方向。
核心问题解答:Split((string)null, ...)的实际作用是什么?
当调用接收单个string类型分隔符的Split重载时,传入null会被视为“不存在有效分隔符”,因此方法不会执行任何拆分操作,直接将原字符串作为唯一元素返回在数组中。这是该重载独有的逻辑,和其他接收数组类型分隔符的重载行为完全不同。
内容的提问来源于stack exchange,提问作者Kevin Martin
相关产品推荐
相关产品推荐

