String.Split() 可以返回 null 吗?(.net).

本文关键字:net null Split String 返回 | 更新日期: 2023-09-27 18:37:00

System.String.Split()会返回null吗?(.NET)

我知道我一直在编码,相信它没有,但是,在阅读文档时,我没有看到这样的陈述。由于文档中没有这样的声明,所以我想问一下社区的经验,有没有人真正遇到过string.Split返回null的情况?

String.Split() 可以返回 null 吗?(.net).

不,它不能返回 null。如果你看一下它的源代码,它甚至用代码契约来保证它:

public String[] Split(params char[] separator) {
    Contract.Ensures(Contract.Result<String[]>() != null);

所有公共过载也都做出相同的保证。

不,它不返回 null。如果分隔符不存在,则返回整个字符串

来自 MSDN

如果此实例

不包含分隔符中的任何字符串,则返回的数组由包含此实例的单个元素组成。如果分隔符参数为 null 或不包含任何字符,则假定空格字符为分隔符

不能返回,请确保您的属性不为空

if (property != null)
{
    string[] splitData = sampleObject.property.Split(new char[] { ',' },
    StringSplitOptions.RemoveEmptyEntries);
}

No.我找不到任何string.Split()返回null的情况.我可以把它弄到:

  • 返回包含一个或多个字符串的数组。
  • 使用 StringSplitOptions.RemoveEmptyEntries 删除条目时返回一个空(零长度)数组。
  • 抛出NullReferenceException,只有当被拆分的字符串被null时。

这些似乎是所有可能的结果。让我们浏览一些方案。首先假设我们有:

public static void WriteArray(string[] values)
{
    Console.Write("[");
    foreach(var item in values)
    {
        Console.Write($"'{item}' ");
    }
    Console.Write("]");     
}
private static char[] comma = new char[] { ',' };

那么我们从例如

var source = "a,b,c";
WriteArray(source.Split(comma));

这当然是['a' 'b' 'c' ]——这是一个成功的案例。现在让我们尝试用错误的输入来打破它:

有了string source = null;我们就会得到Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.

但是其他值不会破坏string.Split,它们返回一个包含一个或多个元素的数组

"a,b,c":     ['a' 'b' 'c' ]
"a,b,c,":    ['a' 'b' 'c' '' ]
"a, b, c":   ['a' ' b' ' c' ]
"abc":       ['abc' ]
"a,b":       ['a' 'b' ]
"a":         ['a' ]
"":          ['' ]
" ":         [' ' ]
",":         ['' '' ]
",,":        ['' '' '' ]
"a,":        ['a' '' ]

您可能不想要这些空条目,因此让我们再试一次

WriteArray(source.Split(comma, StringSplitOptions.RemoveEmptyEntries));

现在我们总是得到一个包含零个或多个元素的数组

"a,b,c":     ['a' 'b' 'c' ]
"a,b,c,":    ['a' 'b' 'c' ]
"a, b, c":   ['a' ' b' ' c' ]
"abc":       ['abc' ]
"a,b":       ['a' 'b' ]
"a":         ['a' ]
"":          []
" ":         [' ' ]
",":         []
",,":        []
"a,":        ['a']

注意:请注意,在这两种情况下都没有对前导/尾随空格进行字符串修剪 - 即 a,b 不会给a, b提供不相同的输出;但您也可以使用StringSplitOptions.TrimEntries来处理这个问题。

例如

    string source = "  a,, b,  c , ";
    WriteArray(source.Split(comma, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries));

显示

 ['a' 'b' 'c' ]