我有一个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年9月2日”;

,但如果我写一个单元测试与原始字符串,象下面,它不返回true

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

还有什么区别? 编码? 文化? 已经试图消除ToLowerInvarient(),但都没有区别

已经尝试在匹配方法中的所有以下

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,重写模块在运行时。但是,他们在单元测试中做。因此,一些关于琴弦显然是不同的。

任何想法?

有帮助吗?

解决方案

您已经验证,在两个字符串连字符其实都是相同的字符?我将检查在调试器对它们的字符代码来排除该字符集可以玩什么花样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top