如果string为null或为空,应该为string.Split(“;”)返回什么

时间:2013-02-11 15:53:17

标签: c# .net

如果string为空或null,

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

对我来说,我正在尝试使用此代码,并且没有任何错误,

string a = string.empty;

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

任何人都可以告诉我为什么它不会抛出错误以及为什么if语句为真。

5 个答案:

答案 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个组件,则条件为真。