none
String.StartsWith 方法的bug RRS feed

  • 问题

  • string data = "\u200Eabcdef";
    while (data.StartsWith("\u200E"))
       data = data.Substring(1);

    最终的结果是data一直循环直到变为空"",导致 data.Substring(1) 异常

    2018年2月10日 5:40

全部回复

  • 不能再现你说的bug,我这里循环一次就正常结束了。
    2018年2月10日 7:41
  • data = data.Substring(1);

    做这个操作之前,应该要先判断.Length>0 才可以


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年2月11日 1:03
  • Hi,

    欢迎在MSDN论坛发帖。

    我调试你的代码发现,到最后会触发一个超出访问范围的异常信息,可以看我下面的截图。

    你可以把代码改成下面这样,就可以解决这个错误。

        string data = "\u200Eabcdef";
                while (data.StartsWith("\u200E"))
                {
                    if (0 == data.Length)
                        return;
                    else
                    {
                        data = data.Substring(1);
                    }
    
                }

    如果你的问题解决了,请及时标记有用的回复作为答案,这样会帮助遇到相同问题的人。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年2月12日 7:46
    版主
  • Hi,

    经过我的研究,这应该不能是startwith函数的bug。

    首先\u200E 代表的是 control character,它是一种 标志的我们写的字是从做到右顺序,还是从右到左的顺序, 对于阿拉伯文字,应该是从右到左的顺序。 这些控制字符并不代表着一个可以被写出的符号。 所以应该是匹配不到data 里面的\u200E,然后结束。

    data.StartsWith("\u200E") ,并不能代表一个显示的字符,就如同空一样,返回的值总是true ,就会导致最后的错误信息诞生。

    这是我对control character字符的理解。 如有不对的地方,希望指正。

    下面是我查阅的相关资料。 

    https://en.wikipedia.org/wiki/Left-to-right_mark

    https://en.wikipedia.org/wiki/Control_character  

    https://stackoverflow.com/questions/29831410/why-does-string-startswith-u2d2d-always-return-true

    Best Regards,

    Hart

    注意:此回复包含对第三方万维网站点的引用。 Microsoft提供此信息为您提供方便。 Microsoft不控制这些网站,并且没有测试在这些网站上发现的任何软件或信息; 因此,Microsoft不能对任何软件或信息的质量,安全性或适用性做任何声明。 使用互联网上发现的任何软件都存在固有的危险,Microsoft警告您,在从互联网检索任何软件之前,请确保您完全理解风险。


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年3月5日 6:20
    版主