このような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を返すものはありません。しかし、それらは単体テストで行います。ですから、弦についての何かは明らかに異なります
何か案は?