1

我在 url 重写模块中有一个方法,看起来像这样

public bool Match(Uri url)
  {
      string x = url.PathAndQuery.ToLowerInvariant();
      string y = RuleData.ToLowerInvariant();

   return x.Contains(y);
  }

但是,对于以下值,它不会返回 true:

x = "/xx09-02-09xx"; y = "09-02-09";

但是如果我用原始字符串编写单元测试,如下所示,它确实返回 true

[Test]
        public void Contains()
        {
            string x = "/xx09-02-09xx";
            string y = "09-02-09";
            Assert.IsTrue(x.Contains(y)); // this returns true
        }

有什么区别?编码?文化?已尝试删除 ToLowerInvarient(),但这没有区别

在 Match 方法中尝试了以下所有方法

bool contains = x.Contains(y);
bool contains1 = x.IndexOf(y) != -1;
bool contains2 = x.IndexOf(y, StringComparison.OrdinalIgnoreCase) != -1;
bool contains3 = x.IndexOf(y, StringComparison.InvariantCultureIgnoreCase) != -1;
bool contains4 = x.IndexOf(y, StringComparison.CurrentCultureIgnoreCase) != -1;

但在重写模块中运行时,这些值都没有返回 true。但是他们在单元测试中做到了。所以关于弦的东西显然是不同的

有任何想法吗?

4

1 回答 1

0

您是否验证了两个字符串中的连字符实际上是相同的字符?我会在调试器中检查它们的字符代码,以排除字符集可能发挥的任何技巧。

于 2010-03-16T12:53:26.020 回答