字符串比较包含不匹配的连字符

时间:2010-03-16 12:51:15

标签: .net string-comparison

我在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。但是他们在单元测试中做了。所以关于字符串的一些东西显然是不同的

任何想法?

1 个答案:

答案 0 :(得分:0)

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