比较if条件产生意外错误的两个字符串C#

时间:2019-10-11 13:40:59

标签: c# string selenium if-statement web-scraping

我执行模糊搜索,我想确保程序找到了正确的人实例。

因此,我将产生的“姓氏”与预期的“姓氏”进行比较。

代码相对简单:

string expectedUserName = $"{nameSplit[0].ToLower()} {nameSplit[1].ToLower()}"; // result: "bechtold julian"
string result = O365Api.SearchUser(mail); // result: "bechtold julian"
if (result.Equals(expectedUserName))
{
    // Correct user is found
    // Never enters here
}

为了进行测试,我还对预期值进行了硬编码:

userName = "bechtold julian";
mail = "julian.bechtold";
string result = O365Api.SearchUser(mail);
if (result.Equals(userName))
{
    // Correct user is found
    // never enters here
}

使用不同的比较方法时,结果相同:

if (result == userName)

,这里是结果和用户名的值:
enter image description here
enter image description here

我错过了什么吗?网络中的字符串是否可以包含未显示的特殊字符?

接下来要解决什么问题?

1 个答案:

答案 0 :(得分:2)

视觉上无法区分的空白字符(空格,不间断空格)和不可区分的非空白字符(拉丁文i和土耳其文i,v和w在瑞典语归类中)有时会导致这种情况。

在调试器中切换到十六进制视图以查看实际字符值。请注意终止的空字节。

取决于它是什么,

  • 编写实用程序函数以对经过经验验证的特殊情况进行规范化
  • 使用字符串比较重载之一(例如,CultureInfo并选择不区分重音的区域性)

    if (result.Equals(userName, StringComparison.InvariantCulture))
    {
        /* match */
    }
    
  • Trim()字符串