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

2つの文字列のハイフンが実際に同じ文字であることを確認しましたか?デバッガーでそれらの文字コードを調べて、文字セットが実行する可能性のあるトリックを除外します。

于 2010-03-16T12:53:26.020 に答える