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