为什么字符串加法结果如此怪异?

时间:2019-08-28 18:30:43

标签: c# string

{% extends "layout.html" %}
{% block content %}
    <link rel="stylesheet" href="{{ url_for('static', filename='css/about.css') }}">
    <link href="https://fonts.googleapis.com/css?family=Raleway&display=swap" rel="stylesheet">
<div>
    <div class="opening" >
        <p class="intro" > Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce placerat,
             sem a lacinia ultricies, quam nibh convallis lorem, sed efficitur nisl nibh et nisi.
              Mauris placerat molestie massa, et fermentum orci scelerisque eu. Morbi ligula est, 
              finibus nec euismod non, auctor mattis orci. Praesent convallis rutrum augue,
               non euismod nisi venenatis eget. 
        </p>
    </div>
</div>


{% endblock content %}

我希望得到public static void Main(string[] args) { int num = 1; string number = num.ToString(); Console.WriteLine(number[0]); Console.WriteLine(number[0] + number[0]); } 1的输出,但是我得到的是111。我想念什么?

2 个答案:

答案 0 :(得分:9)

number[0]的类型是char,而不是string-您没有执行任何字符串连接。相反,您有一个值为49({1的UTF-16值)的char。没有+(char, char)运算符,因此两个操作数都被提升为int,并且您正在执行整数加法。

所以这行:

Console.WriteLine(number[0] + number[0]);

实际上是这样的:

char op1 = number[0];
int promoted1 = op1;

char op2 = number[0];
int promoted2 = op2;

int sum = promoted1 + promoted2;
Console.WriteLine(sum);

(从逻辑上讲,晋升是在两个操作数都经过评估之后发生的-我没有检查规格,因为它不会失败,所以这并不重要。)

答案 1 :(得分:8)

由于[],它给出了字符串的第一个字符。

number[0] + number[0]正在执行49 + 49(字符1的ascii代码);

我认为您想这样做:

public static void Main(string[] args)
{
    int num = 1;
    string number = num.ToString();
    Console.WriteLine(number);
    Console.WriteLine(number + number);
}