String.Split() 可以返回 null 吗?(.net).
本文关键字:net null Split String 返回 | 更新日期: 2023-09-27 18:37:00
System.String.Split()
会返回null
吗?(.NET)
我知道我一直在编码,相信它没有,但是,在阅读文档时,我没有看到这样的陈述。由于文档中没有这样的声明,所以我想问一下社区的经验,有没有人真正遇到过string.Split
返回null
的情况?
不,它不能返回 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' ]