C#+运算符默认为string + object

时间:2016-01-26 19:12:56

标签: c# operator-keyword

我注意到在C#中,+运算符左边是一个字符串,右边是一个对象:

string output = "" + numbers.ElementAt(0); 
//vs
string output = numbers.ElementAt(0).ToString();

为什么默认行为是接受右边的对象而不是字符串?当我在其他的+运算符中看到int时,它是强类型的int / int而不是int / object。

我知道在C#中所有对象都有ToString()方法,这只是一种方法来消除上面第一个例子中调用.ToString()的需要吗?

3 个答案:

答案 0 :(得分:3)

  

为什么默认行为是接受右边的对象而不是字符串?

好吧,首先,一个接受两个字符串的重载,如果你传递两个将要使用的重载字符串,那么这是默认行为。但是如果你传递一个字符串和一个非字符串,那么将使用(字符串,对象)重载。

至于为什么会出现重载,这是因为C#语言设计者认为将字符串连接到任何对象是完全合理的,并且对于任何类型的对象都有合理的实现

  

当我看其他+运算符为int时,它是强类型的int / int而不是int / object。

您如何实现if(myBool == true)重载?我没有看到任何好的实现,不像字符串连接。

  

我知道在C#中所有对象都有ToString()方法,这只是一种方法来消除上面第一个例子中调用.ToString()的需要吗?

如果对象为null,则实际上有效,而您的解决方案则不然。如果你考虑到那个,那么是,这基本上就是重载所做的一切。

答案 1 :(得分:0)

这只是一种消除上面第一个例子中调用.ToString()的需要的方法

答案 2 :(得分:0)

字符串连接会自动将非字符串转换为字符串。

来源:C# Language Specification: Addition operator, MSDN