我在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。但是他们在单元测试中做了。所以关于字符串的一些东西显然是不同的
任何想法?
答案 0 :(得分:0)
您是否确认两个字符串中的连字符实际上是相同的字符?我会在调试器中检查它们的字符代码,以排除字符集可能出现的任何技巧。