2015-01-09 27 views
2

我已將顯示器放入我的程序中,並且可以清楚地看到正在搜索的字符串存在。string []。即使文本在數組中,也不會找到匹配項

有可能有'隱形'字符阻止它的工作?

var items = new List<string>(currComponent.Split(new string[] 
    { "\r\n", "\n" }, StringSplitOptions.None)); 
    string feedback = string.Empty; 
       foreach (string i in items) 
       { 
        feedback += i + ". "; 
       } 
       ScriptingObject.WriteLogMessage 
       ("feedback:" + feedback + "<EOF>", true); 
    if (items.Contains(attributeDescription)) 

顯示的結果表明,該變量反饋包含短語「煙道」, 但items.Contains("Flue")沒有找到它。

Message: Status message: 2015-01-09 10:36:18 | feedback:_ ,. Boiler Flue Type. 
Boiler make. Boiler Model. Gas Appliance Safety Protector. __.. . <EOF> 

Next message: unable to process an Update Location record ...because of error: 
item Flue not found . 

回答

6

因爲字符串中items不是完全匹配"Flue""Boiler Flue Type"List.Contains()搜索,還記得你打電話List.Contains()String.Contains()

注意,還有一個更簡單的加入您的字符串方式:

string feedback = String.Join(". ", items); 

使用LINQ,你可以使用這個:

if (items.Any(x => x.Contains(attributeDescription))) { } 

如果你沒有明確需要List<string>你也可以保留String.Split()返回類型(string[]),放在一起:

var items = currComponent.Split(new string[] { "\r\n", "\n" }, 
    StringSplitOptions.None); 

ScriptingObject.WriteLogMessage("feedback: " 
    + String.Join(". ", items) 
    + "<EOF>", true); 

if (items.Any(x => x.Contains(attributeDescription))) { 
} 
+1

謝謝。這是正確的答案。 –

+0

我仍然遇到這個問題,它沒有找到文本,它顯然寫入日誌。相關數據來自Screen Grab。它可能包含不可見或不可打印的字符,這會阻止.contains正常工作? –

+0

對於像「Boiler」和System.String一樣的_plain ASCII words_(!!!)我無法考慮任何字符編碼問題。嘗試發佈你的新代碼... –

相關問題