C#有时是'加'但有时'加'?

时间:2014-03-01 01:26:21

标签: c#

当我这样做时,我不明白为什么:

int myInt = 2 + 2;

然后myInt4

但是当我做同样的事情但是我说了一句话......

int myInt = "2" + 2;

然后我得到22。

C#会做数学还是字符串?

2 个答案:

答案 0 :(得分:3)

这不会编译:

int myInt = "2" + 2;

但这会:

string myInt = "2" + 2;

为什么呢?因为+运算符对数字类型执行添加,对字符串执行字符串连接。允许操作员以不同类型执行不同功能的能力称为operator overloading,是C#的一个关键特性。实际上,you can overload这些以及您自己的自定义类型中的许多其他运算符。

因为一个运算符是一个字符串,所以编译器认识到这应该被视为字符串连接,因此它将两个参数传递给String.Concat方法,其中任何非字符串通过调用{转换为字符串{3}}方法。

答案 1 :(得分:0)

在C#中,您可以覆盖+

等运算符的行为

请参阅http://msdn.microsoft.com/en-us/library/k1a63xkz.aspx

class Plus
{
    static void Main()
    {
        Console.WriteLine(+5);        // unary plus
        Console.WriteLine(5 + 5);     // addition
        Console.WriteLine(5 + .5);    // addition
        Console.WriteLine("5" + "5"); // string concatenation
        Console.WriteLine(5.0 + "5"); // string concatenation 
        // note automatic conversion from double to string
    }
}
/*
Output:
5
10
5.5
55
55
*/