为什么当字符串为空或null时,string.Split(";")不会抛出错误?

20

如果字符串为空或为null,那么string.split(";")不应该抛出错误吗?

对我来说,我正在尝试这段代码,并且没有任何错误。

string a = string.empty;

if (a.Split(';').Length - 1 < 1)

有人能告诉我为什么它不会抛出错误,以及为什么if语句为真吗?


2
你可以试试 =) 这很简单。 - Ph0en1x
8
你有没有阅读文档?http://msdn.microsoft.com/en-gb/library/b873y76a.aspx - Daniel Kelley
3
只需阅读文档即可找到信息。 - Alexandre Vinçon
@AlexandreVinçon 我感到困惑。 - Developer
5个回答

64
如果字符串为null,.Split()会抛出一个NullReferenceException异常,就像任何其他实例方法一样。
如果字符串为空,.Split()将返回一个单个空字符串的数组(除非您传递StringSplitOptions.RemoveEmptyEntries)。 这是其更一般(且不那么意外)行为的一种特殊情况;如果分隔符在源字符串中没有出现,则它将返回包含整个源字符串的数组。

12

它应该按照文档所述的行为进行:

如果此实例不包含任何separator中的字符,则返回的数组由包含此实例的单个元素组成。

一个空字符串clear不包含separator中的任何字符,因此返回一个只包含一个指向空字符串的元素的数组。

当然,如果在null引用上调用Split,则会得到NullReferenceException。区分对空字符串的引用和null引用很重要。

如果您希望该方法返回一个数组,请使用StringSplitOptions.RemoveEmptyEntries。如果您希望结果是错误,请自行检查并抛出所需的异常。

在使用API时,不要猜测其行为,如果有任何疑问,请查看文档。


0
从你的代码来看,a 不是 null,而是 String.Empty。所以当你用分号将一个空字符串拆分时,会得到 1 个项目。1 - 1 小于 1。

0
一个空字符串与一个null字符串不是同一回事。字符串作为引用类型,如果为空,则始终包含""。null完全不同,所以如果你有一个空字符串,它的长度将为0,你的if语句将成立。

0
该代码将字符串按 ';' 分割成组件 - 这个操作的结果是字符串数组。如果组件少于2个,则条件为真。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接