C#字符串比较失败

joe*_*joe 25 c#

我的应用程序在字符串比较失败.我已经放入一个断点然后使用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(零宽度空间)>.你需要弄清楚它来自哪里.

  • 有.我将他的字符串复制并粘贴到dotnetfiddle中进行检查,并且在出现之前有一个字符. (3认同)
  • @leppie,哦,你的意思是`Contains`函数调用本身的unprintable char.但是在最后一次测试中它可以****,因为它是不可打印的= P. (3认同)
  • @leppie,为什么`subject.Contains("<#MethodResourceObjectives>")== false`对于**`>`之后的任何(可打印/不可打印)符号**? (2认同)

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)

  • 我将此添加为社区维基,因为Jon Skeet已经指出了这个问题.评论太长了. (9认同)