字符串比较

时间:2009-06-10 11:57:21

标签: c# string

方案

请考虑以下代码段。

        string s = "S";
        string s1 = "S";
        string s2 = string.Empty;
        switch (s)
        {
            case "S":
                s1 = "StringComparison";
                break;
            default:
                break;
        }

        switch (s[0])
        {
            case'S':
                s2 = "StringCOmpare2";
                break;
            default:
                break;
        }

第一个开关案例,导致IL内的字符串比较。

但是第二个开关案例不会导致IL内的字符串比较。

有人可以证明这一点吗?

4 个答案:

答案 0 :(得分:13)

因为在第二个开关上你没有进行字符串比较,所以你正在进行字符比较。

答案 1 :(得分:3)

最简单的答案是你没有在第二个区块进行字符串比较;你要比较两个角色。

但是,你是对的,因为这两个代码块在功能上是等价的。一个好的优化编译器应该能够检测到's'是一个固定长度的字符串,并重写它不要使用完整的字符串比较。

答案 2 :(得分:2)

您的第二个switch语句未使用字符串,而是使用单个 char 。因此,没有字符串比较。

答案 3 :(得分:2)

您正在通过其indexer访问该字符串,该字符串返回一个字符串,因此您可以使用该字符串,就像它是一个字符数组一样。

所以,你所做的是一个字符比较。使用撇号作为'S'也会告诉你,你使用'S'作为字符而不是字符串。