我过去几次遇到过这种情况,最终决定找出原因。StringSplitOptions.RemoveEmptyEntries
建议删除空条目。
那么为什么这个测试失败了?
var tags = "One, Two, , Three, Foo Bar, , Day , ";
var tagsSplit = tags.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Trim());
tagsSplit.ShouldEqual(new string[] {
"One",
"Two",
"Three",
"Foo Bar",
"Day"
});
结果:
Values differ at index [2]
Expected string length 5 but was 0. Strings differ at index 0.
Expected: "Three"
But was: <string.Empty>
因此它失败了,因为我们有一个空字符串,而不是
"Three"
,这正是StringSplitOptions.RemoveEmptyEntries
应该防止的。 最佳答案
最可能是因为您在分割后更改了字符串。在拆分值后修剪值,RemoveEmptyEntries
不会将字符串" "
视为空。
以下将实现您想要的,基本上是创建自己的带状空元素:
var tagsSplit = tags.Split(',').
Select(tag => tag.Trim()).
Where( tag => !string.IsNullOrEmpty(tag));