我的应用程序在字符串比较失败.我已经放入一个断点然后使用Visual Studio的中间窗口并完成以下实验
subject
"<#MethodResourceObjectives?>"
subject.Contains("<#Method")
true
subject.Contains("<#MethodResource")
true
subject.Contains("<#MethodResourceObjectives")
true
subject.Contains("<#MethodResourceObjectives>")
false
Run Code Online (Sandbox Code Playgroud)
这似乎是不可能的,有没有人知道可能发生什么?
Jon*_*eet 57
听起来"s"和">"之间可能存在不可打印的字符.
我通常使用这样的东西来显示字符串的真实内容:
for (int i = 0; i < text.Length; i++)
{
Console.WriteLine("{0:x4}", (int) text[i]);
}
Run Code Online (Sandbox Code Playgroud)
当然,这不是一个直接的窗口方便:(
实际上,只需将文本复制并粘贴到我的Unicode Explorer(页面底部),看起来这确实是问题 - 你之前有一个U + 200B(零宽度空间)>.你需要弄清楚它来自哪里.
lep*_*pie 27
复制/粘贴文本,我可以确认相同的行为.
输出:
"<#MethodResourceObjectives>".ToCharArray()
{char[27]}
[0]: 60 '<'
[1]: 35 '#'
[2]: 77 'M'
[3]: 101 'e'
[4]: 116 't'
[5]: 104 'h'
[6]: 111 'o'
[7]: 100 'd'
[8]: 82 'R'
[9]: 101 'e'
[10]: 115 's'
[11]: 111 'o'
[12]: 117 'u'
[13]: 114 'r'
[14]: 99 'c'
[15]: 101 'e'
[16]: 79 'O'
[17]: 98 'b'
[18]: 106 'j'
[19]: 101 'e'
[20]: 99 'c'
[21]: 116 't'
[22]: 105 'i'
[23]: 118 'v'
[24]: 101 'e'
[25]: 115 's'
[26]: 62 '>'
Run Code Online (Sandbox Code Playgroud)
然后
subject.ToCharArray()
{char[28]}
[0]: 60 '<'
[1]: 35 '#'
[2]: 77 'M'
[3]: 101 'e'
[4]: 116 't'
[5]: 104 'h'
[6]: 111 'o'
[7]: 100 'd'
[8]: 82 'R'
[9]: 101 'e'
[10]: 115 's'
[11]: 111 'o'
[12]: 117 'u'
[13]: 114 'r'
[14]: 99 'c'
[15]: 101 'e'
[16]: 79 'O'
[17]: 98 'b'
[18]: 106 'j'
[19]: 101 'e'
[20]: 99 'c'
[21]: 116 't'
[22]: 105 'i'
[23]: 118 'v'
[24]: 101 'e'
[25]: 115 's'
[26]: 8203 '?' <--------- input string contains 'garbage'
[27]: 62 '>'
Run Code Online (Sandbox Code Playgroud)