如果字符串为空或 null,
string.split(";") 不应该抛出错误吗?
对我来说,我正在尝试这段代码并通过它没有任何错误,
string a = string.empty;
if (a.Split(';').Length - 1 < 1)
谁能告诉我为什么它不会引发错误以及为什么 if 语句为真。
如果字符串为空,.Split()
将(显然)抛出 a NullReferenceException
,就像任何其他实例方法一样。
如果字符串为空,.Split()
将返回一个由单个空字符串组成的数组(除非您通过StringSplitOptions.RemoveEmptyEntries
)。
这是其更普遍(且不那么意外)行为的一个极端案例;如果分隔符没有出现在源字符串的任何位置,它将返回一个包含整个源字符串的数组。
它应该像记录的那样表现:
如果此实例不包含 中的任何字符
separator
,则返回的数组由包含此实例的单个元素组成。
空字符串 clear 不包含 中的任何字符separator
,因此返回一个数组,该数组由引用空字符串的单个元素组成。
当然,如果你调用Split
一个空引用,你会得到一个NullReferenceException
. 区分对空字符串的引用和空引用很重要。
如果您希望该方法返回一个空数组,请使用StringSplitOptions.RemoveEmptyEntries
. 如果您希望结果是错误,您应该自己检查并抛出您想要的任何异常。
不过,重要的是不要猜测使用 API 时的行为:如果您有任何疑问,请查阅文档。
从您的代码中,a 不为空,它是 String.Empty。所以当你用分号分割一个空长度的字符串时,有 1 个项目。1 - 1 小于 1
空字符串与空字符串不同。字符串,作为引用类型,如果为空,则始终包含“”。Null 根本不是一回事,因此,如果您有一个空字符串,它的长度将为 0,并且您的 if 语句将有效。
代码将字符串拆分为用 - 分隔的组件';'
- 此操作的结果是字符串数组。如果少于 2 个组件,则条件为真。