17

如果字符串为空或 null,

string.split(";") 不应该抛出错误吗?

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

string a = string.empty;

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

谁能告诉我为什么它不会引发错误以及为什么 if 语句为真。

4

5 回答 5

59

如果字符串为空,.Split()将(显然)抛出 a NullReferenceException,就像任何其他实例方法一样。

如果字符串为空,.Split()将返回一个由单个空字符串组成的数组(除非您通过StringSplitOptions.RemoveEmptyEntries)。
这是其更普遍(且不那么意外)行为的一个极端案例;如果分隔符没有出现在源字符串的任何位置,它将返回一个包含整个源字符串的数组。

于 2013-02-11T15:54:47.110 回答
10

它应该像记录的那样表现:

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

空字符串 clear 不包含 中的任何字符separator,因此返回一个数组,该数组由引用空字符串的单个元素组成。

当然,如果你调用Split一个空引用,你会得到一个NullReferenceException. 区分对空字符串的引用和空引用很重要。

如果您希望该方法返回一个数组,请使用StringSplitOptions.RemoveEmptyEntries. 如果您希望结果是错误,您应该自己检查并抛出您想要的任何异常。

不过,重要的是不要猜测使用 API 时的行为:如果您有任何疑问,请查阅文档。

于 2013-02-11T15:56:12.077 回答
0

从您的代码中,a 不为空,它是 String.Empty。所以当你用分号分割一个空长度的字符串时,有 1 个项目。1 - 1 小于 1

于 2013-02-11T15:55:34.830 回答
0

空字符串与空字符串不同。字符串,作为引用类型,如果为空,则始终包含“”。Null 根本不是一回事,因此,如果您有一个空字符串,它的长度将为 0,并且您的 if 语句将有效。

于 2013-02-11T15:56:06.480 回答
0

代码将字符串拆分为用 - 分隔的组件';'- 此操作的结果是字符串数组。如果少于 2 个组件,则条件为真。

于 2013-02-11T15:56:29.913 回答