不,我找不到任何 string.Split()
返回 null
的情况。它可以返回:
- 包含一个或多个字符串的数组。
- 使用
StringSplitOptions.RemoveEmptyEntries
删除条目后返回空(零长度)数组。
- 仅当要拆分的字符串为
null
时,抛出 NullReferenceException
。
这些似乎是所有可能的结果。让我们通过一些场景来运行一下。首先假设我们有:
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' ]
null
,那么它会像调用任何null
对象的方法一样抛出异常。如果没有找到分隔符进行分割,则最终将得到一个仅包含一个元素的数组——整个字符串的值(这个值永远不可能为null
)。 - MikeTeeVee