当我这样做时,我不明白为什么:
int myInt = 2 + 2;
然后myInt
将4
。
但是当我做同样的事情但是我说了一句话......
int myInt = "2" + 2;
然后我得到22。
C#会做数学还是字符串?
答案 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
*/