代码之家  ›  专栏  ›  技术社区  ›  trinalbadger587

为什么要在字符串上的索引+问号运算符上获取多个数字?

  •  2
  • trinalbadger587  · 技术社区  · 7 年前

    当我运行以下代码时

    public class Program
    {
        public static void Main()
        {
            string s = "480";
            Console.WriteLine(1 == -1 ? 0 : s[1]);
            Console.WriteLine(s[1]);
        }
    }
    

    我明白了

    56
    8
    

    我不明白我是怎么得到56分的。

    4 回复  |  直到 7 年前
        1
  •  5
  •   Patrick Hofman Wahid Bitar    7 年前

    你的 0 : s[1] 转换 char 在里面 s[1] 设置为整数。以及 8 ASCII表中的 56 .

    您想使用 烧焦 也在左侧(使用单引号):

    Console.WriteLine(1 == -1 ? '0' : s[1]);
    
        2
  •  3
  •   Patrick Hofman Wahid Bitar    7 年前

    我不明白我是怎么得到56分的。

    在第一行中,它被解释为字符的UTF-16代码 8 :

    Console.WriteLine(1 == -1 ? 0 : s[1]);
    

    使用条件运算符,您可以在 int 0 和a char 因此编译器将后者隐式转换为 内景 (提供UTF-16代码)并将其打印到控制台

    在第二行,你实际上得到了 烧焦 打印值

    Console.WriteLine(s[1]);
    

    这里没有隐式转换。

        3
  •  2
  •   Mong Zhu Bart de Boer    7 年前

    Documentation on the ?: Operator

    第一个表达式和第二个表达式的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换

    “条件运算符是右关联的。”

    因此,在第一种情况下,结果变成数字,在第二种情况下变成字符。

        4
  •  2
  •   trinalbadger587    7 年前

    s[1]是字符的int值。

    问号运算符表示从零开始的整数,表示它是int。它将字符转换为int。