2010-03-16 62 views
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(),但沒什麼區別

試圖在匹配方法

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; 

,但沒有真正的回報這些值以下所有,重寫模塊在運行時。但他們在單元測試中。所以有關字符串的東西顯然是不同的

有什麼想法嗎?

回答

0

您是否驗證過兩個字符串中的連字符實際上是相同的字符?我會在調試器中檢查它們的字符代碼,以排除字符集可能播放的任何技巧。

+0

這是我的想法。如果是我,我會在emacs中使用hexl模式檢查它。 – 2010-03-16 13:02:28

+0

學校男孩錯誤 - 我需要修剪字符串,因爲有一個領先的空間。 * embarressed * – ChrisCa 2010-03-16 14:05:04