我过去几次遇到过这种情况,最终决定找出原因。
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));

10-07 19:08